ユーザがブログ投稿を持つデータモデルを想定します。各投稿には、一意のタイトルと多くの属性があります。Cassandraのセカンダリインデックスは2回のDB読み込みにつながります
私はそれぞれの行は次のようにされている列ファミリー「記事」を持っている:
posts = {
"yersterday" : {
date : 03-04-2012
userID : abfe222234
tags : "beatles,paul"
}
}
私はインデックスにユーザーによる投稿をしたいので、私は別の通常の列ファミリーあります
user_posts = {
abfe222234 : {
yesterday : null
....
}
}
を
このモデルは、私がこれらのスライドに来たカサンドラの二次索引付けに関する多くの研究の後に来ています:http://www.slideshare.net/edanuff/indexing-in-cassandraそして、スーパーカラムファミリの使用はますます少なくなっています。
私の質問:
、ユーザー投稿に関するすべての詳細が必要な場合、それは私が二度DBを読まなければならないことを意味します。一度、すべての記事のIDを取得するため、一度すべての投稿のフェッチしますこれらのIDの詳細。
私には何が欠けていますか?
ありがとう、 Issahar。
編集:
他のオプション、「user_postsは」スーパーCFも作る、それが内部の「ポスト」であるすべてのデータが含まれているようにすることです。
pros:すべてのデータを1回だけフェッチする必要があります。
短所:1.すべてのデータを複製します。 2.投稿の属性を一度検索することはできません。
あなたはどう思いますか?
何百もの投稿がある場合はどうなりますか?どうやってそれを取ってくるの? ( 'a'、 'b'、...)でKEYを使って非常に長いCQLを構築しますか?それは正しくないようです! –
ゆっくりと、私は想像します。真剣に、述語を使うことは論理的なアプローチのようです。たとえば、http://prettyprint.me/2010/01/20/introduction-to-nosql-and-cassandra-part-2/を参照してください。具体的には、「データを読み書きするときは、列の読み取り/書き込みが可能です。 (列)が何らかの方法でソートされていると仮定すると、リストの列名で指定するか、スライス述語で指定することができます(これは構成パラメータです)。 " –
しかし、それらはそうではありませんすべて並べ替えられています。あなたはユーザーAの投稿、ユーザーBの投稿、そしてユーザーAの投稿を持っています。BTW、私はヘブライ語ですので、ポインタのおかげで... :) –