2016-08-25 20 views
1

我想收集时间序列数据并将其存储在snappydata存储中。我将收集数百万行数据,并且希望跨时间片/范围进行查询。PARTITION BY在时间序列表中的列是什么?

下面是一个例子查询我想做的事:

select avg(value) 
from example_timeseries_table 
where time >= :startDate and time < :endDate; 

所以,我想,我想有时间列PARTITION BY列,而不是经典的主键列。在我熟悉的其他技术(如Cassandra DB)中,使用分区键中的时间列将直接指向分区,并允许在单个节点中提取时间片的数据,而不是跨越多个分布式节点。

为了保持高性能,我假设我需要在此表中按列“时间”进行分区。

example_timeseries_table 
------------------------ 
id int not nullable, 
value varchar(128) not nullable, 
time timestamp not nullable 
PERSISTENT ASYNCHRONOUS 
PARTITION BY COLUMN time 

这是正确的列进行分区上高效,时间片查询或做我需要做更喜欢列:YEAR_NUM,month_num,DAY_NUM,hour_num列和分区柱上所有的人都为好,然后做这样一个查询来查询集中到一个特定的分区节点?:

select avg(value) 
from example_table 
where year_num = 2016 
and month_num= 1 
and day_num = 4 
and hour_num = 11 
and time >= :startDate and time < :endDate; 

回答

1

当单个分区具有全部数据,单个处理器来处理数据,你就失去分布式处理。事实上,如果您有时间序列数据,大多数情况下您将查询保存最新时间范围的节点,并且其余计算容量处于闲置状态。如果你期望在不同的时间范围内进行并发查询,那么它可能没问题,但大多数时候情况并非如此。

假设您正在使用行表,另一种加速查询的方法是在时间列上创建一个索引。

SnappyData支持对行表进行分区修剪。如果你决定按照你在这里提到的方式,时间戳列的分区修剪应该工作。

相关问题