15

私は、redisデータベースへのRインターフェースと、foreachdoRedis並列バックエンドをいじってみました。このツールをより適切に適用するために、いくつか質問があります。

  1. doMC、doSMP、doSnowなどはすべて、同じコンピューター上でワーカープロセスを呼び出し、リストから要素と適用する関数を渡して、結果を収集することで機能しているようです。doMCの場合、ワーカーはメモリを共有します。ただし、データベースがこれと同じ機能をどのように提供できるかについては、少し混乱しています。
  2. doRedisジョブキューにスレーブコンピューターを追加すると(このビデオのように)、doredisデータベース全体がスレーブコンピューターに送信されますか?または、各スレーブは特定の瞬間に必要なデータ(つまり、リストの1つの要素と適用する関数)だけです。
  3. 追加のデータと関数をdoRedisジョブキューに明示的に渡すにはどうすればよいですか?各スレーブはその計算を実行する必要がありますか?
  4. doRedisとforeachを使用する場合、他の並列バックエンドに適用されない可能性のある追加の「落とし穴」はありますか?

これは多くの質問であることを私は知っていますが、並列処理がどのように機能するかについての私の限られた理解がそれを実装する私の能力を妨げている状況に遭遇しています。たとえば、最近、大規模なデータベースで計算を並列化しようとしましたが、データベース全体をクラスター上の各ノードに渡すことに気づきました。この操作により、並列化によって得られた利点が完全に失われました。

ありがとうございました!

4

1 に答える 1

15

パズルの1つのピースはrredisです

1- doRedisはrredisを使用します。具体的には、doRedis.Rはredis:RPushを使用し( foreachアイテムを反復処理するため)、各redisWorkerはredis:BRPopを使用してredisリスト(doRedisの「ジョブ」で名前を付けた もの)から何かを取得します。

Redisは単なるデータベースではありません。ここではキューとして使用されています!

2-すべてのRワーカーが(リモートで)アクセスできるインスタンスが1つあります。Redisサーバーを分散キューと考えてください。ジョブマスターはアイテムをリストにプッシュし、ワーカーはアイテムを取得して処理し、結果リストにプッシュします。N個のアイテムに対してm人のワーカーを持つことができます。何をしたいかによります。

3-envパラメータを使用します。これは、すべてのワーカーが( Redis:Getを介して)アクセスできるRedis:Setを使用します。foreach側で区切り式を渡します。これは、ワーカーがアクセスできるredisの文字列キーに設定されます。

4-私が知っていることはありません(しかし、それはほとんど権威がないので、周りに尋ねてください。)また、提供されたソースコードを読むことをお勧めします。上記の答えは、とを読んdoRedis.Rで直接redisWorker.Rです。

お役に立てれば。

[redisにtelnetで接続し、Redis:monitorコマンドを発行してチャタリングを前後に監視します。]

于 2011-04-24T02:12:32.763 に答える