2012-03-04 12 views
0

ユーザがブログ投稿を持つデータモデルを想定します。各投稿には、一意のタイトルと多くの属性があります。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.投稿の属性を一度検索することはできません。

あなたはどう思いますか?

答えて

1

このケースでは、実際には2つのデータベースの読み取りを実行してデータを取得する必要があります。価値のあるものについては、ユーザーが関心を持つデータが索引に完全に含まれていない限り、ほとんどのリレーショナル・データベースも2つの論理読み取りを実行する必要があります。唯一の違いは、リレーショナルDBではネットワークラウンドトリップが1つしかないことです。

+0

何百もの投稿がある場合はどうなりますか?どうやってそれを取ってくるの? ( 'a'、 'b'、...)でKEYを使って非常に長いCQLを構築しますか?それは正しくないようです! –

+0

ゆっくりと、私は想像します。真剣に、述語を使うことは論理的なアプローチのようです。たとえば、http://prettyprint.me/2010/01/20/introduction-to-nosql-and-cassandra-part-2/を参照してください。具体的には、「データを読み書きするときは、列の読み取り/書き込みが可能です。 (列)が何らかの方法でソートされていると仮定すると、リストの列名で指定するか、スライス述語で指定することができます(これは構成パラメータです)。 " –

+0

しかし、それらはそうではありませんすべて並べ替えられています。あなたはユーザーAの投稿、ユーザーBの投稿、そしてユーザーAの投稿を持っています。BTW、私はヘブライ語ですので、ポインタのおかげで... :) –

関連する問題