6

Webアプリケーションで、ページをレンダリングするために、ユーザーハッシュの束を取得するなど、いくつかのredis呼び出しを行う必要があるとします。これを高速化するには、redisコマンドをMULTI / EXECセクションにまとめて、パイプラインを使用することで、多くのラウンドトリップを回避できます。ただし、データがたくさんあるか、書き込みを分散したいので、データをシャーディングする必要もあります。ハッシュ関数を使用するのではなく、役割に基づいてアプリケーションとシャードのデータレイアウトを明確に理解していない限り、異なるキーが異なるノードに存在する可能性があるため、パイプライン処理は機能しません。したがって、「概念的に一意」を完了するために多くのサーバーに接続するため、パフォーマンスをあまり低下させることなく、異なるサーバー間でデータをシャーディングするためのベストプラクティスは何ですか。仕事?答えは開発中のWebアプリケーションによって異なると思います。最終的にはいくつかのテストを実行しますが、他の人が私が述べたトレードオフにどのように対処したかを知ることは役に立ちます。

4

1 に答える 1

4

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

シャードとパイプラインを同時に実行する場合は、操作をグループ化して Redis インスタンスごとにパイプライン化し、インスタンスごとにパイプライン化を使用する必要があります。

Ruby を使用した簡単な例を次に示します: https://gist.github.com/2587593

パフォーマンスをさらに改善する 1 つの方法は、操作がグループ化されたら、Redis インスタンスのトラフィックを並列化することです (つまり、操作をグループ化し、それらをすべてのインスタンスに並行して送信し、すべてのインスタンスからの応答を待ちます)。

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

于 2012-05-09T12:01:38.207 に答える