0

まず、英語で失礼します。それは私の母国語ではありません。SQLデータベースをCassandraに移動する作業をしていますが、解決できない質問があります。曲を保存するSQLテーブルがあるとしましょう。各曲には主キーとしてIDがあり、キーで指定された行のフィールドに保存されているすべての関連データにアクセスできます。著者、性別、肩書きなど、いくつかの異なる基準を使用して検索するためのインデックスもいくつかあります。

これをCassandraスキーマに移動することを考えるとき、私は同等の列ファミリーを作成できるという考えを回避します。ここで、曲IDは行キーであり、曲属性は列です。次に、5つまたは6つの手動インデックスを作成して、著者、タイトル、性別などで検索できます。著者、タイトル...は列キーになり(複合列名を使用して、一意に保つためにいくつかのデータを追加します)、値は、各行がによって識別される静的列ファミリーで検索するための曲IDになります。曲ID。

しかし、私はここに私の疑いが現れます。何が良いですか:各インデックスCFはIDのみを格納するか、すべての属性を格納しますか?最初のオプションでは、必要なメモリの量を減らすことができますが、各曲の属性を取得するには、(少なくとも)2回の読み取りが必要です。2番目のオプションでは、インデックスごとに同じ情報を1回繰り返すため、より多くのメモリが必要ですが、1回の読み取りで、必要なすべての属性を取得できます。これがより高速なスキーマである場合、必要な追加のメモリを想定できると思いますが、実際にはより高速になりますか?データベースが大きくても動作が遅くなることはありませんか?または、Cassandraが行を格納する方法と、2回の読み取りが原因で、インデックスCFによって指定された各行を検索するのが遅い操作ですか?

別の詳細:2番目のオプション(「インデックス」として機能するCFにすべての属性を格納する)を使用すると、最初のオプションを使用するよりも約80%多くのメモリが必要になると計算しました(CFは実際にインデックスとして機能して適切なデータを検索します)曲の「メイン」CF)。

どんな助けでも大歓迎です。

前もって感謝します!

4

2 に答える 2

0

幅の広い列のパターンもチェックしてください。PlayOrmのようないくつかのライブラリはあなたに代わってパターンを実行するので、スケーラブルSQLのようなものを実行できます(つまり、パーティションを使用)。必要な数のパーティションを持つことができます。今後もNoSqlオブジェクトマッピングライブラリが増えると思います...PlayOrmのwikiにもnoSqlパターンとPlayOrmパターンの両方を含むパターンページがあります....nosqlパターンをチェックアウトすることをお勧めします。

于 2013-01-16T00:12:32.680 に答える
0

もちろん、さまざまなデータモデルにはさまざまなトレードオフがありますが、主な関心事はデータセットのサイズとアクセス速度にあるようです。Cassandraは、ジョブを実行するために必要なリソースを提供できる限り、非常に大量のデータを線形にスケーラブルな方法で処理できます。一方、get-by-keyを実行している場合、2つのルックアップを実行することは非常に安価です。私の直感では、属性の更新が簡単になる以外の理由がなければ、IDだけを保存することです。次に、クエリが十分に高速でないことがわかった場合に最適化できます。ただし、RDBMSから来ているので、かなり高速になると思います。

于 2013-01-15T19:30:29.793 に答える