1

假设我有 20 个 SnappyData 节点。

而且,我有一张这样的桌子:

example_timeseries_table

id int not null,
value varchar(128) not null,
time timestamp not null
foo varchar(128) not null,
PARTITION BY COLUMN time

而且,我提出以下查询:

select sum(value) from example_timeseries_table where foo = 'xyz'

SnappyData 是否调用所有 20 个节点,收集结果然后返回响应?如果是这样,我将如何改进如何进行此类查询?表是否应该设计不同以使“foo”成为 PARTITION 列?

4

2 回答 2

1

今天使用列表时就是这种情况。Spark 催化剂引擎如何通过数据帧执行查询。注意两点:

  1. 将行表用于此类选择性查询:行表支持分区修剪(查询修剪到管理“foo”的节点)以及索引。
  2. 正在工作中的索引列表
于 2016-08-25T12:38:29.767 回答
1

SnappyData 尝试将其数据尽可能均匀地分布在所有数据节点上。分配单位是表桶。所以回答你的问题,是的,SnappyData 将调用所有 20 个节点来获取结果。这将实现并行处理,并且在数据量大的情况下会很好。但是,您应该通过查找接近集群中可用处理器总数的素数来配置表的存储桶数。(有一个现有的 JIRA 票可以跟踪自动发生这种情况的能力)

此外,我们正在开发一项功能,如果分区列在谓词中,该功能将进行分区修剪。

为简单的表扫描使用分区列可能不是很有用。但是如果您打算稍后添加连接查询,这将大大提高查询性能,因为如果连接条件在分区列上,我们会尽量避免 Spark shuffle。

于 2016-08-25T07:07:10.157 回答