非常に大量の時系列データを保存してクエリできるようにする必要があります。
データのプロパティは次のとおりです。
想定されるクエリのプロパティ:
その他の要件:
私の最初の考えは、SQLデータベースの代わりにPyTables/Pandas with HDF5 files をバックエンドの格納として使用することでした。
質問:
PyTables/Pandasが「最良の」ルートであると仮定すると、データをいくつかのHDFファイルに分割し、それぞれが所定の期間にわたるか、すべてを巨大になる単一のファイル?
固定形式とテーブル形式のどちらを選びますか?私には、シリーズ全体がおそらくRAMそして、テーブル形式のインデックスを必要とせずにメモリ内でスライスできます。
そしてそれがではない最善のアプローチである場合、このデータストアをどのように構造化するべきか、またはどのテクノロジーを検討すべきですか?大量の時系列データの保存に取り組むのは私が最初ではありませんが、この課題を解決するための一般的なアプローチは何ですか?
私が検討した他のアプローチ:
graphite プロジェクトの一部である carbon と whisper をご覧ください。 Carbonは非常に大量の時系列データを処理できます。しかし、ドキュメントを読んだところで(使用してから数年が経過しています)、それは数値データのみです。文字列データもあるので、これは役に立たないかもしれません。ただし、大量のデータを迅速に処理する方法について、いくつかの知識を得ることができるかもしれません。
Orbitzでグラファイトが最初に生産されたとき、どれほど適切にスケーリングできるかを理解するために、グラファイトは 160,000メトリック/分 を処理していました。
InfluxDB は、Goで記述されたオープンソースのデータベースです。特に時系列データを処理するように作成されており、Cassandraと比較してはるかに優れたパフォーマンスを示す ベンチマークを公開しています :
InfluxDBのパフォーマンスはCassandra 3つすべてのテストで4.5倍の書き込みスループットで、10.8倍のディスクスペースを使用し、テストされたクエリで最大168倍の応答時間を実現しました。
列指向のデータベースをチェックアウトすることもできます。配列データベースの意味がわかりませんが、提案されているアプローチを使用すると、タイムフレームごとに動的に値の数を設定できます。同じタイムスタンプに複数の値を持つこともできます。興味深い部分は、同じタイムスタンプで測定された値がある場合、それらを追加の列として保存できることです(たとえば、温度と湿度を測定するセンサー、株式取引価格と取引のサイズなど)。列指向の性質のため、100列のテーブルを作成できますが、クエリが5列のみにアクセスする場合、データベースは5列のデータのみを読み取ります。
独自の時系列データベースの作成に関するシリーズを書いたので、それを確認してください。