私はすでにのMongoDB、CouchDBは、Redisの、東京内閣や他のNoSQLデータベースで経験しました。最近、私はRiakを見つけたので、とても興味深いです。それを始めるにあたって、私はNoSQL Worldに「hello world」という小さなツイッター・クローンを書くことにしました。完全に機能するクローンを得るためには、つぶやきを時間順に並べる必要があります。 Riakのドキュメントを読んだ後、私はMap-Reduceがこの仕事のための適切なツールであることを発見しました。私の開発環境ではうまくいきますが、何百もの並列クエリを使用して、プロダクションのパフォーマンスはどうですか?データをソートするための方法が他にも高速かもしれませんか?それとも、カサンドラのような順序付けられた形式でデータを保存することは可能ですか?Riakでデータを並べ替え/並べ替える方法は?
更新: 私はこの問題の別の解決策を見つけたと思います。単純なリンクリストです。したがって、可能な実装の1つは、すべてのユーザーが自分の「タイムラインバケット」を取得することです。そこでは、ツイートデータへのリンク自体が格納されます(ツイートはツイートバケットに別々に格納されます)。ご存じのとおり、このタイムラインバケットには、「first」という名前のキーが含まれている必要があります。このキーは、最新のタイムラインオブジェクトにリンクし、リストの開始点です。 、タイムラインに新しいつぶやきを挿入するだけでタイムラインバケツに新しい項目を挿入し、「最初の」-itemにこの新しい項目の「次」-linkを設定するには、その後、「最初」に新しいアイテムを作ります。要するに
:あなたはリンクリストに行うよう...ツイッターと同様に
を項目を挿入し、個人のタイムラインだけでユーザーに表示される20件のつぶやきを保持しています。最後の20個のつぶやきを受け取るには、2つのクエリしか必要ありません。高速化のために、最初のクエリはRiakのリンク・ウォーキング機能を使用して、「next」というタグが付いた最新の20個のオブジェクトを取得します。最後に、2番目と最後のクエリは、最初のクエリで計算されたキーを使用して、つぶやき自体を受け取ります(map/reduceを使用)。あなただけのフォローを解除したユーザーのツイートを削除するには
、私は、関連するタイムラインオブジェクト/つぶやきを受け取るためにRiakに1.0の二次インデックス機能を使用します。
セカンダリインデックスでRiak 1.4のソートとページネーションが利用可能です:http://basho.com/basho-announces-availability-of-riak-1-4/ – nacmartin