1

この問題に遭遇しましたが、どうすればよいかわかりません。これらのユーザー アクションを保持しているとします。

  • いいね
  • コメント
  • 株式
  • アップロード

など、リストは20アクションの周りに移動します。今私が思いついた最善の戦略は、単一の CF を作成して、それを呼び出してuser_actionsから、複合行を使用することです (それが呼び出される方法だと思います)。

したがって、行は で構成されますがuser_id:action、すべてのユーザー アクションを 1 行に保存しない理由を尋ねる人もいると思います。ここに私の最大の問題があります。なぜなら、ユーザーが自分の友人や自分自身が過去に何をしたかを確認したいと言うときに、ユーザーが見たいと思うオプションをユーザーに選択してもらいたいからです。

たとえば、ユーザーが友人の好きなものを見たいとします。私がする必要があるのは、それらすべての好きなものでその行を取得することだけです。簡単ですよね?

しかし、ユーザーが見たい場合everything(これがデフォルトのオプションです)、その場合、~20クエリを作成する必要があります。トラフィックが少なくても問題ないと思いますが、1 秒あたり 100k の読み取りがあるとしたら、100k を意味します。 * 20、それは恐ろしく聞こえます...

しかし、cassandraがサポートしていないときに、すべてを単一の行に格納すると、個々のアクションをどのように照会するのでしょうWHEREか?

ちなみに、私はライブラリを使用phpしてphpcassaいます。

4

1 に答える 1

1

最終的には、アクション情報をページ分割する必要があります。

また、イベントの日付順に並べられたデータをページ分割し、ユーザーが表示したいアクションの種類をフィルタリングする機能も必要です。私は次のことを提案します:

  • アクションタイプごとに1行。
  • キーはuserId+actionTypeです
  • 列名は[dateinteger+EventId]です。
  • 列の値は、単一の文字列にシリアル化されたイベントオブジェクトです

ユーザーが選択したアクションに対応するuserId+actionTypeのリストを使用してデータをクエリできます。また、列名をスライスして結果をページ分割するか、日付範囲でフィルタリングします。

このアプローチは、すべてのユーザーアクションに単一の行を使用するよりも優れていると思います。これは、レコードを日付順に簡単に並べ替えたり、クエリするアクションタイプを選択したりできるためです。単一の行を使用して、アクションタイプまたは日付のどちらでレコードを並べ替えるかを選択する必要があります。

また、データを適切にクエリするためにセカンダリインデックスを作成する必要があるため、これは各アクションイベントの行を持つよりも優れています(IMO)。

于 2012-11-09T18:36:10.163 に答える