私のデータの構造は次のとおりです:
date: <timestamp>
filter_a: <integer> -> range [0, 1000]
filter_b: <integer> -> range [0, 1000]
filter_c: <integer> -> range [0, 86400]
filter_d: <integer> -> range [0, 6]
group: <string>
second_group: <integer>
variable_a: <float>
variable_b: <float>
variable_c: <float>
a couple more no very important
次のクエリを実行する必要があります。
最初:
- フィルターデータによって
date
、filter_a
、filter_b
、filter_c
、その他
次に、フィルタリングされたデータを使用します。
- すべてのレコードを数える
- 取得平均の
variable_a
、variable_b
およびvariable_c
- 取得標準偏差のを
variable_a
、variable_b
そしてvariable_c
- 取得四分位 のを
variable_a
、variable_b
そしてvariable_c
group
orsecond_group
およびaggregate(Count、Avg、Std、..)によってデータをグループ化する
システムの利用者の数は約10または15であるが、項目数は今それが、巨大である70Mが、それはなります500M数週間で、それが可能になる1000Mについての年に。
クエリの数は少なく、同時ユーザー数は10人以下です。私の問題は、この大量のデータでこれらのクエリを処理する方法です。
これまでに何を試しましたか?
私
mongodb
はから始めましたが、最初は高速でしたが、10M +で四分位数を計算すると遅くなりました。インデックスを追加すると改善しましたが、すべてのデータをクエリする必要がある場合はあまり役に立ちませんでした。mongodbを使い始めたのは、データが非常に動的だったためですが、幸いにもデータ形式は「もう変更されない」ためです。ノードのように見えるので
filter_a
、filter_b
試してみましたneo4j
。私はそれをneo4jがとても好きでしたが、私のグラフはエッジがたくさんあるので、クエリはあまり速くありませんでした。最後に、データ形式は変更されず、コレクション/テーブルは1つだけなので、SQLで結合する必要がないため、postgresqlを確認しました。私のテストはpostgresqlの方が高速でしたが、将来的に適切にスケーリングできなくなるのではないかと心配しています。
私が必要なものは何?
- この場合、postgresqlは適切な選択肢ですか?
- 使用できる別の種類のデータベースはありますか?この場合、どちらが最適ですか?
- それを改善するために他に何ができますか?
編集する
- 約1Mの要素が毎日挿入され、時間に沿って「変更してはいけません」。
- 書き込み速度は重要ではありません
- ハード要件は、読み取り/集約を高速化することです
ありがとう!