1

今週、著者がどのように活動を実施したかを説明する興味深い記事を読みました。基本的に、彼らはアクティビティを処理するために2つのアプローチを使用していますが、これは私のシナリオに適応しているため、特定の数(x)のフォロワーを持つユーザーfooを持っていると仮定します。

if x<500, then the activity will be copyied to every follower feed
    this means slow writes, fast reads
if x>500, only a link will be made between foo and his followoers
    in theory, fast writes, but will slow reads

したがって、一部のユーザーがアクティビティフィードにアクセスすると、サーバーはすべてのデータをフェッチしてマージします。つまり、コピーされた独自のアクティビティをすばやく検索し、リンクを介してクエリを実行します。タイムラインの制限が20の場合、それぞれを10個フェッチしてから、マージします。

私はRiakとリンクの機能でそれをやろうとしているので、これが私の質問です:リンクはコピーよりも速いですか?私の建築のアイデアは十分ですか?私が見るべき他の解決策や技術はありますか?

PS:私は本番用のアクティビティフィードを実装していません。これは、パフォーマンスが高く、Riakを少し使用するアクティビティフィードを実装する方法を学ぶためだけのものです。

4

1 に答える 1

2

2つの考え。

1)いいえ、リンク(Riak Link Walkingの意味で)は、これを実装する正しい方法ではない可能性が非常に高いです。1つは、各リンクが個別のHTTPヘッダーとして保存され、送信するヘッダーフィールドの数に関するHTTP仕様の推奨制限があります。(ただし、公平を期すために、テストでは、Riakを使用してヘッダーで1000以上のリンクを使用できますが、正常に機能するようです。ただし、お勧めしません)。さらに重要なことに、Link Walking APIを介してこれらのリンクをクエリすると、実際にはバックエンドでMapReduceが使用され、意図した種類の使用法ではかなり遅くなります。

これは、リンクのリストであるJSONオブジェクトを保存できないということではありません。確かに、これは有効なアプローチです。このためにRiakリンクを使用しないことをお勧めします。

2)それを適切に実装する方法については、それは難しい質問であり、トラフィックとユースケースによって異なります。ただし、一般的なアプローチは有効です。更新のX値のフィードをコピーし(Xが500かそれよりはるかに小さいかどうかをテストで決定する必要があります)、更新の数がXより大きい場合にリンクします。

どのようにリンクする必要がありますか?3つの選択肢があり、すべてトレードオフがあります。1)セカンダリインデックスを使用する(2i)、2)検索を使用する、または3)リンクを「手動で」使用する。つまり、手動で逆参照するURLを含むJSONドキュメントを保存します(リンクウォーキングクエリを使用するのではありません)。

クリップボードのエンジニアによるhttp://vimeo.com/album/2258285/page:2/sort:preset/format:thumbnail(Riak でのソーシャルアプリケーションの構築)を見て、これをどのように解決したかを確認することを強くお勧めします。問題。(基本的に、リンクには検索を使用しました)。

于 2013-02-26T18:05:39.480 に答える