2016-03-22 14 views
1

非常に高速なルックアップ時間を必要とするメモリ内の複数の値マップに特定の使用例があります。それらは一日一回設定されているので、すべての実用的な目的のために不変であると考えることができます。 Redisは、複数のスレッドがアクセスした場合にCPUがスロットルされるため、オプションではありません。データ複製のために、マルチインスタンスredisが多すぎるメモリを占有します。ここで考慮すべき重要な点は、読み取り速度が非常に高いことです。同時に約40〜50人の労働者から約1,000万件の要請が爆発的に発生しました。メモリキー値ストアで複数回読み込みを書き込む

シンプルなクライアントサーバーアーキテクチャを作成し、複数のリーダーがサーバーに接続して共有メモリマップから読み取ることを考えていました。しかし、このようなアーキテクチャがすでに存在し、このユースケースに対して多大なテストが行​​われているのではないかと思うが、その場合、私は車輪を再発明するべきではない。

私の最高の選択肢は何ですか? TIA。

答えて

0

あなたには適していないかもしれませんが、RBLDNSDを試してDNSに値を保存してください。高性能で結果がキャッシュされ、あらゆるプログラミング環境から値を読み取るのは簡単です。値を書き込むには、ゾーンファイルに直接書き込む必要がありますが、フォーマットはシンプルで簡単です。

+0

これがこのフレームワークの正しい使い方ではないとは思いますが、これをチェックします。 – Sohaib

0

マップのサイズについては言及していませんが、パフォーマンスが非常に重要であることを考えると、それぞれのワーカーに「メモリ内の複数のキー値マップのコピー」のコピーを保存することを検討することができます。

次に、マップをリフレッシュする時間であることを各作業者に通知する簡単なメカニズム(たとえば、Redis PUBLISHまたは他のpubsubタイプのフレームワーク)を実装できます。

+0

マップのサイズは、最大の地図の数千から約2,000万のエントリの範囲です。赤字の場合の合計メモリ占有量は約9GBです。私は各労働者にそれほど余分な記憶を持っていません。労働者は、自分自身がかなりメモリを消費するスパーク・ジョブを実行しています。 – Sohaib

+0

すべての労働者がすべてのデータにアクセスする必要がありますか?各作業者が*チャンク*だけを必要とするようにデータセットを分割できますか?作業を作業者に割り当てるときに、すでに類似の作業を行っている作業者を好むことができますか?ホットデータ用にインメモリキャッシュを使用し、Redisをより低速のネットワークキャッシュとして使用できますか?[stackoverflow.com](http://meta.stackexchange.com/questions/69164/does-stack-exchange-use) -caching-and-if-so-how) –

+0

マップアクセスはかなりランダムです。私はそれに基づいてパーティションを作れるとは思わない。しかし、主に私が試したことのないホットキャッシュメカニズムについては、繰り返しクエリがいくつあるかわからないため、私の前提は、反復は低いが、私は間違っている可能性があります。 – Sohaib

0

スタックオーバーローリング自己宣伝警察に遭遇する危険性があります:-) eXtremeDBが考慮されるかもしれません。スキーマレスではありませんが、スキーマは単純にキーと値のペアを定義できます。 MVCC(オプティミスティック、ノンブロッキング)同時実行性をサポートしているため、比較的まれな書き込みであっても読者の邪魔にならず、すべてのCPUコアを利用することができます。

+0

これはオープンソースですか? – Sohaib

+0

@Sohaibそれはオープンソースのようではありません。 – Eborbob

+0

これはオープンソースではありませんが、ソースコードライセンスはオプションです。 –

関連する問題