私は時系列のDBを実装しようとしていますが、私はデータベースのさまざまなオプションを使いましたが、私はその知識がないので、 PostgreSQLと私はDjangoで(特にORMのために)それを使用するのに多少親しみがあります。質問が多いPostgreSQLの時系列
アイデアは、4列のデータの時系列を保存することです(すべての価格でインデックスされます)。
timestamp | id | item | price
私はこれらを毎分追加することを検討しています。約1500個のデータポイントが毎分一括挿入されています。 1ヶ月後には、分に特化する必要がなくなり、1日に1回で十分です(00:00)。
私は、PostgreSQLがこれでうまくいくと思っていますか?これはバックエンドによって提供され、レイテンシがかなり低い必要があります(往復300ミリ秒)。
私の主な問題は、PostgreSQLがアイテムの範囲、開始と終了のタイムスタンプ、データが要求された間隔などの要件が与えられても、データを効率的に返すことができるかどうかを理解することにあります。手動でフィルタリング)。
私のテーブルには、次のデータを単一の項目が含まれている場合:
timestamp | id | item | price
1514391000 01 foo 10
1514391100 02 foo 20
1514391200 03 foo 30
.......... .. ... ..
1514392000 11 foo 20
1514393000 21 foo 20
を私はstart: 1514391000
、end: 1514392000
とstep: 200
を要求できるようにしたいと思い、私はその後(1000年バック6件の結果を受け取ることを期待します、 1200,1400,1600,1800及び2000)。これは効率的な方法でPostgreSQLで可能ですか?
私が考えることができるのは、自分のtimeseriesを挿入するときに、その値が最も近い分に切り上げられていることを確認してから、データベースを検索する必要なしにフィルタするタイムスタンプを正確に知っています。
また、特定のアイテム、同じシナリオで「最も近いタイムスタンプ」を検索することができるかどうかは疑問です。これらのすべては、賢明なタイムスタンプエントリによって解消されるようですが、それが実現するかどうかはわかりません。
[Timescale DB](https://www.timescale.com/)を評価しましたか?これはPostgresから構築され、時系列データが主な目標です。私の会社は以前のバージョンをテストし、時系列クエリではかなり滑らかであると判断しましたが、要件が変わって[Citus](https://www.citusdata.com)に行きました。 – bma
ああ、私は何とかそれを完全に逃した(InfluxDBなどを見ていた)。 Timescale DBがDjangoのORMでうまくいくかどうかは分かりませんが、私は他のタスクに追加のカスタムSQLを気にしません。私はまた、関係データベース(メトリクスの外)の少しのためにこのDBを使用するつもりです。 – sof2er
Djangoでうまく動作しなかったのは驚いたでしょう。これは、PostgreSQLの中核となるもので、時系列的に最適化するために追加作業が行われているからです。私の最初の要件は非時系列レポートを含み、正常に機能しました(基本的には通常のPostgresサーバーとして動作します)。私のテストでは最大のテーブルに80億行しかないので、数十テラバイトのデータでテストしたとは言えません。 – bma