2016-08-25 4 views
1

私は時系列データを収集し、それをスナップデータストアに保存したいと考えています。何百万行ものデータを収集し、タイムスライス/範囲を問わずクエリを作成したいと考えています。ここで時系列表のPARTITION BYとは何ですか?

は私がやりたいの例クエリです:

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

、私は、時間列にCOLUMN BY PARTITIONではなく、古典的なPRIMARY KEY列を持つようにしたいと考えています。私がCassandra DBに慣れ親しんでいる他のテクノロジーでは、パーティションキーの時間列を使用することで、パーティションに直接アクセスでき、多くの分散ノードではなく、単一のノードでタイムスライスのデータを取得できます。

実行するには、この表の 'time'列で分割する必要があると仮定します。

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よく、その後、単一のパーティションは、すべてのデータ、データの単一プロセッサプロセスを持っている場合は?:特定のパーティションのノードにクエリを集中する

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

をこのようなクエリを行うと、あなたは、分散処理を失います。実際、時系列データがある場合、ほとんどの場合、最新の時間範囲を保持しているノードにクエリを行い、残りの計算能力はアイドル状態になります。さまざまな時間範囲で同時クエリが発生すると予想される場合は、大丈夫かもしれませんが、ほとんどの場合そうではありません。

ローテーブルを使用していると仮定すると、クエリを高速化する別の方法は、timeカラムにインデックスを作成することです。

SnappyDataは、行テーブルのパーティションプルーニングをサポートしています。ここで言及する方法を選択する場合は、タイムスタンプ列のパーティションプルーニングが機能するはずです。

関連する問題