2016-10-13 2 views
0

私が取り組んでいるシステムでは、24時間365日のデバイスで送信された文字列のストリームを格納する必要があります。 たとえば、IDが 'ID'のデバイスは、10秒ごとに異なる文字列を送信します。私たちは、何千ものデバイス、意味、何百万ものデータ・セットの数百人の話をしている何百万ものデータセグメントのデータを保存する

('ID', t, t+10, somestring) 

: だから、私は、次のデータ項目を格納する必要があります。

最も重要なクエリは次のとおりです。

Query(id, start, end) ==> list of strings 

どのようにデータを格納するお勧めですか? どのデータベースをお勧めしますか?

答えて

2

カッサンドラの場合、これはかなり簡単です。

CREATE TABLE device_strings (
    id text, 
    year_month_day text, 
    start timestamp, 
    end timestamp, 
    value text, 
    PRIMARY KEY ((id, year_month_day), start, end) 
); 

これは、各ID/1日にパーティションがあることを意味します(無限に成長することはできません)。これは、クエリの中で、開始/終了が1日に渡る場合、複数回読む必要があることを意味します。

0

これはTimeSeriesデータであり、CassandraはTimeSeriesの種類のデータに適している可能性があります。データをIDで格納し、開始(降順)、終了(降順)をカサンドラの主キーとして使用します。あなたの書き込みと読み込みは高速で、パフォーマンスのために線形にスケーリングできます。 注:Cassandraでは、パーティションの値の数を2Billionに制限しています。古いデータにTTLを設定しない場合は、パーティションに別のキーを追加して値を制限することを検討する必要があります。これにより、常にデータを送信するIDがほんの少ししかない場合でも、クラスタ全体にデータを広げることができます。

関連する問題