カラムファミリのポイントは何ですか?


9

RocksDBのようなNoSQLデータベースシステムが列ファミリーと呼ばれる機能を提供しているのを見てきました。概念が何を意味するかは理解していると思いますが、それらを使用することの実際の(実用的な)利点は何ですか?少なくとも場合によっては、ルックアップのパフォーマンス、またはキーと値の全体の空間局所性を改善できると思いますか?しかし、私が理解している限り、データベースアクセスの実際のセマンティクスには影響しないようです。これは正しいです?行方不明のものはありますか?

回答:


3

RocksDB FAQから興味深い情報を見つけところです。(RocksDBはKVストアです。)

ここにいくつかの関連する抜粋があります。

Q:列ファミリーは何に使用されますか?

A:列ファミリーを使用する最も一般的な理由:(1)データのさまざまな部分で異なる圧縮設定、コンパレーター、圧縮タイプ、マージ演算子、または圧縮フィルターを使用します。(2)列ファミリーをドロップしてデータを削除します。(3)メタデータを格納する1つの列ファミリーとデータを格納する別の列ファミリー。

Q:複数の列ファミリーと複数のrocksdbデータベースにデータを保存することの違いは何ですか?

A:主な違いは、バックアップ、アトミックな書き込み、書き込みのパフォーマンスです。複数のデータベースを使用する利点:データベースは、バックアップまたはチェックポイントの単位です。データベースを列ファミリーよりも別のホストにコピーする方が簡単です。複数の列ファミリーを使用する利点:(1)書き込みバッチは、1つのデータベースの複数の列ファミリーにまたがってアトミックです。複数のRocksDBデータベースを使用してこれを実現することはできません。(2)WALに同期書き込みを発行すると、データベースが多すぎるとパフォーマンスが低下する可能性があります。

Q:キースペースが異なります。それらを接頭辞で区切るか、別の列ファミリーを使用する必要がありますか?

A:各キースペースがかなり大きい場合は、それらを異なる列ファミリーに配置することをお勧めします。小さい場合は、1つの列ファミリーに複数のキースペースをパックすることを検討してください。あまりにも多くの列ファミリーを維持する手間を省くことができます。


2

SQLとの並列性を求めているのではないことは承知していますが、この記事では、列ファミリの目的と実際的な利点について簡単に説明します。

SQLの視点からカサンドラ・データ・モデルを理解する RubyScaleに:

そのときの列ファミリとは何ですか?テーブルのプレフィックスだけですか?列ファミリには、その動作を変更するいくつかの設定があります。 キーのキャッシュ設定(この例ではUUID)、行全体のキャッシュ設定(この例ではテーブル全体)、最も重要なのはソートです。Cassandraには、OFFSETはなく、LIMITとBETWEENに相当するものだけがあります。この例では、列名は単なる文字列ですが、整数またはタイムスタンプにすることもでき、常にソート順に格納されます。1つの列ファミリーにはタイムスライスでクエリするタイムスタンプでソートされたデータがあり、別の列ファミリーにはアルファベット順にクエリするアドレス帳データがある場合があります。事後に実行できる唯一のソートは、特定のスライスを逆にすることです。


面白い。あなたが言うように、それは質問に完全に答えるわけではありませんが、ヒントを提供します。ありがとう。
Noldorin 2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.