0

cassandraでデータモデルを設計しているときに疑問がありました。

つまり、私はこのCFを作成しました

Page-Followers {"page-id":{"user-id":"time"}}

上記のCFで2つのクエリを実行したいと思います。

1)特定のページをフォローしているすべてのユーザーIDを( phpcassaのmultiget関数を使用して配列として)取得します。2)特定のユーザーが特定のページをフォローしているかどうかを確認する。 つまり、user-id = 1111のユーザーは、ページpage-id=100をフォローしているかどうか。


それで、どうすればそのCFに基づいてそれらのクエリを作成できますか。

注: この状況で新しいCFを作成したくないので、このユーザーアクション(つまり、ユーザーがページのフォローボタンをクリックする)のために、3つのCFにデータを挿入する必要があり、このために別のCFを作成した場合は、合計4つのCFにデータを挿入する必要があります。パフォーマンスの問題が発生する可能性があります。

phpcassaで例を挙げれば、それは素晴らしいことです...


別の疑問は次の
とおりです。-大学のソーシャルネットワークサイト(つまり、ページフォロワー、ユーザーフォロワー、通知、アラートなど)のcassandraデータモデルを作成したので...等)。
ユーザーアクションごとに、2つまたは3つ以上のCFにデータを挿入する必要があるので、パフォーマンスの問題が発生しますか?いいデザインですか?

助けてください...

よろしくお願いします

4

1 に答える 1

1

通常、Cassandra でのデータ モデリングでは、まずクエリを調べてから、それに適したデータ モデルを構築します。

あなたの場合、次のことができます(私はphpcassaの経験がないので、アプローチしかできません。phpcassaビットを理解する必要があります)

1) 開始列を ''、終了列を '' としてスライス クエリを実行し、範囲を非常に大きな値に設定します。これにより、すべての列が返されます。

2) rowkey = 100 および userid = 1111 に対して get column を実行するだけです。値が null でない場合、ユーザーはページをたどります。

Cassandra は書き込み用に高度に最適化されています。Cassandra を使用してデータをモデル化するための推奨される方法は、複数の CF に対しても、非正規化された方法で書き込むことです。2 つか 3 つの家族への書き込みは問題にならないはずです。パフォーマンスを向上させるために、いつでも書き込みを非同期にすることができます。

編集: http://thobbs.github.com/phpcassa/tutorial.htmlは phpcassa に適した場所です。

于 2012-07-11T17:53:53.337 に答える