回答:
RocksDB FAQから興味深い情報を見つけたところです。(RocksDBはKVストアです。)
ここにいくつかの関連する抜粋があります。
Q:列ファミリーは何に使用されますか?
A:列ファミリーを使用する最も一般的な理由:(1)データのさまざまな部分で異なる圧縮設定、コンパレーター、圧縮タイプ、マージ演算子、または圧縮フィルターを使用します。(2)列ファミリーをドロップしてデータを削除します。(3)メタデータを格納する1つの列ファミリーとデータを格納する別の列ファミリー。
Q:複数の列ファミリーと複数のrocksdbデータベースにデータを保存することの違いは何ですか?
A:主な違いは、バックアップ、アトミックな書き込み、書き込みのパフォーマンスです。複数のデータベースを使用する利点:データベースは、バックアップまたはチェックポイントの単位です。データベースを列ファミリーよりも別のホストにコピーする方が簡単です。複数の列ファミリーを使用する利点:(1)書き込みバッチは、1つのデータベースの複数の列ファミリーにまたがってアトミックです。複数のRocksDBデータベースを使用してこれを実現することはできません。(2)WALに同期書き込みを発行すると、データベースが多すぎるとパフォーマンスが低下する可能性があります。
Q:キースペースが異なります。それらを接頭辞で区切るか、別の列ファミリーを使用する必要がありますか?
A:各キースペースがかなり大きい場合は、それらを異なる列ファミリーに配置することをお勧めします。小さい場合は、1つの列ファミリーに複数のキースペースをパックすることを検討してください。あまりにも多くの列ファミリーを維持する手間を省くことができます。
SQLとの並列性を求めているのではないことは承知していますが、この記事では、列ファミリの目的と実際的な利点について簡単に説明します。
SQLの視点からカサンドラ・データ・モデルを理解する RubyScaleに:
そのときの列ファミリとは何ですか?テーブルのプレフィックスだけですか?列ファミリには、その動作を変更するいくつかの設定があります。 キーのキャッシュ設定(この例ではUUID)、行全体のキャッシュ設定(この例ではテーブル全体)、最も重要なのはソートです。Cassandraには、OFFSETはなく、LIMITとBETWEENに相当するものだけがあります。この例では、列名は単なる文字列ですが、整数またはタイムスタンプにすることもでき、常にソート順に格納されます。1つの列ファミリーにはタイムスライスでクエリするタイムスタンプでソートされたデータがあり、別の列ファミリーにはアルファベット順にクエリするアドレス帳データがある場合があります。事後に実行できる唯一のソートは、特定のスライスを逆にすることです。