2012-05-09 5 views
6

Webアプリケーションでは、ページをレンダリングするために多数のredis呼び出しを行う必要があるとします。これをスピードアップするために、MULTI/EXECセクションでredisコマンドをラップして、パイプラインを使用することで、多くのラウンドトリップを避けることができます。しかし、あなたはまたたくさんのデータを持っているか、書き込みを配布したいので、あなたのデータを断片化したいと思っています。ハッシュ関数を使用するのではなく、役割に基づいてアプリケーションとシャードのデータレイアウトを明確に理解していない限り、異なるキーが異なるノードに存在する可能性があるため、パイプライン処理は機能しません。だから、概念的にユニークな仕事を完了するために多くのサーバーに連絡が取られているため、パフォーマンスをあまり損なうことなく、異なるサーバー間でデータを破棄するベストプラクティスは何ですか?答えは、開発中のWebアプリケーションに依存し、最終的にはいくつかのテストを実行しますが、私が言及したトレードオフに他人がどのように対処しているかを知ることは役に立ちます。redis sharding、pipeline、round-trips

答えて

4

MULTI/EXECとパイプライニングは2つの異なるものです。パイプライニングなしでMULTI/EXECを実行することもできますし、逆も可能です。

シャードとパイプラインを同時に実行する場合は、操作をRedisインスタンスごとにパイプラインにグループ化し、各インスタンスに対してパイプラインを使用する必要があります。さらにパフォーマンスを向上させるためにhttps://gist.github.com/2587593

一つの方法は、操作が(つまり、あなたのグループの操作をグループ化された後のRedisインスタンス上でトラフィックを並列化することで、あなたはすべてにそれらを送信します。ここでは

は、Rubyを使った簡単な例です。すべてのインスタンスからの回答を待つ)。

非同期非ブロッキングクライアントが必要なため、これは少し複雑です。最高のパフォーマンスを得るには、C/C++をクライアント側で使用する必要があります。これはhiredis +あなたが選んだイベントループを使うことで簡単に実装できます。

+0

洞察のために100万のおかげで、特にトラフィックを並列化することについて少し感謝します! – idrarig