複数のプロセスが同じデータセットで動作するシステムをセットアップする必要があります。アイデアは、ワーカー プロセスによって (非同期的に) 取得できる要素のセット (つまり、値の繰り返しがない) を持つことです。プロセスは複数のサーバーに分散される可能性があるため、分散ソリューションが必要です。
現在考えているパターンは、Redis を使用して、作業データを保持するセットを保持することです。各プロセスはセットに接続し、そこから値をポップする必要があります。セット内の要素へのランダムなアクセスが必要なため、のランダム機能spop
は実際には私たちにとってプラスです。データは、メインの PostgreSQL データベースから入力する必要があります。
前述したように、クエリに使用できる PostgreSQL データベースもあり、プロセスは要素を要求するときにアクセスできます。ただし、負荷が大きい場合にボトルネックになる可能性があるかどうかはわかりません。このサブシステムでは、非常に大量の同時アクセス (数百または数千のプロセスを考える) が予想されます。
これに関連する場合に備えて、rQ
非同期タスク (ジョブとワーカー) を処理するために Python を使用しています。
編集:サイズに関しては、要素はそれほど大きくないと予想できます-トップサイズは約500〜1000バイトである必要があります。これらは基本的に URL であるため、何かおかしなことが起こらない限り、そのサイズよりも十分に小さくする必要があります。要素の数は同時プロセスの数に依存するため、おそらく約 10 ~ 50 K の要素が適切な目安になります。これは一種のステージング領域であることに注意してください。そのため、サイズよりも速度に重点を置く必要があります。
要約すると、私の質問は次のとおりです。
複数のプロセスを使用する場合、Redis セットは共有アクセスに適していますか? そのソリューションがどのように拡張されるかを示すデータはありますか? もしそうなら、何か指針やアドバイスを提供できますか?
共有データを入力する場合、適切な更新戦略は何ですか?
どうもありがとうございました!