2016-08-25 19 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支持對行表進行分區修剪。如果你決定按照你在這裏提到的方式,時間戳列的分區修剪應該工作。

相關問題