私はCassandraで非常に大きなmysqlテーブルを採用するための最良のデータモデルを見つけようとしています。 このテーブルは、このように構成されています(ここではない)Cassandra、大きなテーブルを動的にフィルタリングして更新する方法は?
CREATE TABLE big_table (
social_id,
remote_id,
timestamp,
visibility,
type,
title,
description,
other_field,
other_field,
...
)
ページには、多くのremote_idsを含めることができ、多くの社交を含めることができます。
Social_idはパーティション化キーです。remote_idとtimestampはクラスタリングキーです。「Remote_id」はユニティシティを示し、「Time」は結果の順序を示します。ここまでは順調ですね。
問題は、ユーザーが1つまたは複数のソーシャル、1つ以上のタイプ、可視性(0,1,2であってもよい)、日付の範囲、またはまったく何もフィルタリングすることなくページコンテンツを検索できることです。 さらに、フィルタに基づいて、ユーザーは可視性を設定できる必要があります。
私はこのケースを処理しようとしましたが、私は本当に持続可能な解決策を見つけることができます。 私が持っている最高のものは、元のテーブルに追いつくために必要な別のテーブルを作成することです。 このテーブルには、必要があります:
- page_idの:狂気である、フィルタの組み合わせごとにマテリアライズド・ビューを作成し、キー
プラスをクラスタリング:キー
2番目のテーブルを作成しないでください。この場合、最高のカッサンドラモデルは何でしょうか?他のテクノロジーに切り替えることを検討する必要がありますか?
コンテンツを複製するのに、私が述べた問題(複数の動的フィルタ)を使ってテーブルをモデル化するにはどうすればよいですか?フィルタの組み合わせごとにテーブルを作成しますか?またはテーブルと多数のマテリアライズドビュー?このケースを扱う最良のモデルは何ですか? –
Cassandra:TDGの書籍の例では、ユーザーが使用するクエリを事前定義することを提案しています(book: 'hotel'を' name'または 'free_rooms count'で検索する例)。どのようなクエリでも事前定義されていないものは、SELECT *;を使用して、アプリケーション側でこれを処理するか、セカンダリインデックスを使用する必要があります。 – doz10us
ただし、セカンダリインデックスは一意の値を持つ列(インデックスは列に等しい)といくつかの異なる値を持つ列(たとえば、「性別」列)に対しては推奨されません。 – doz10us