2

インデックスをサポートできるメモリ内データベースのオープンソースを探しています。

ユースケースは、大きく成長するアイテムがたくさんある場合です。各アイテムには、クエリが必要ないくつかのフィールドがあります。現在、データはアプリケーションのメモリに保存されています。ただし、データの増加に伴い、データベースの分散/シャーディングについて考える必要があります。

いくつかのオプションを検討しました

  1. Redis クラスターを使用できますが、インデックスや SQL のようなクエリの概念はありません。

  2. Apache Igniteはインメモリと分散型の両方であり、SQL クエリを提供します。ただし、問題は、ignite がすべてのマスター ノードに対してすべてのクエリを起動するため、最終結果がそれらのクエリの中で最も遅いものよりも遅くなることです。多数のノードのうち、実行されていない/遅いノードが実際にアプリケーションの速度を大幅に低下させる可能性があるため、問題のように思えます。さらに ignite では、読み取りはマスターから行われ、スレーブは使用されないため、クエリをスケーリングすることは困難です。ノードを増やすと、クエリの数が増えてさらに遅くなるため、マイナスの影響があります。

  3. Cassandra - Cassandra のインメモリ オプションを使用できますが、ノードあたりのテーブルの最大サイズは 1 GB になる可能性があるようです。テーブルが 1 GB を超える場合は、パーティショニングに頼る必要があります。これにより、cassandra が複数のクエリ (ノードごとに 1 つ) を作成するようになり、問題になります (ignite と同じ)。スレーブの数を増やすことで Cassandra インメモリ テーブルの読み取りをスケーリングできるかどうかは不明です。

私たちは他の解決策にもオープンですが、マルチクエリがどこでも問題になるかどうか疑問に思っています (hazelcast のように)。

私たちのユースケースの理想的なソリューションは、スレーブの数を増やすことで読み取りスケーリングできるインデックスを持つメモリ内データベースです。分散/シャード化すると複数のクエリが発生し、1 つのエラー ノードがシステム全体の速度を低下させる可能性があるため、気が進まない.

4

3 に答える 3