我想收集时间序列数据并将其存储在 snappydata 存储中。我将收集数百万行数据,并且我想跨时间片/范围进行查询。
这是我想做的一个示例查询:
select avg(value)
from example_timeseries_table
where time >= :startDate and time < :endDate;
所以,我想我想在时间列上使用 PARTITION BY COLUMN 而不是经典的 PRIMARY KEY 列。在我熟悉的其他技术(如 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 列和 PARTITION BY COLUMN,然后执行类似查询这将查询集中到特定的分区节点?:
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;