非常に長いベクトルを保持する何千ものレコードを持つmongodbがあります。特定のアルゴリズムを使用して、入力ベクトルとMDBデータセットとの相関関係を探しています。
疑似コード:
function find_best_correlation(input_vector)
max_correlation = 0
return_vector = []
foreach reference_vector in dataset:
if calculateCorrelation(input_vector,reference_vector) > max_correlation then:
return_vector = reference_vector
return return_vector
計算が実行される順序は気にしないので、これはmap-reduceパターンの非常に良い候補です。
問題は、私のデータベースが1つのノード上にあることです。多くのマッピングを同時に実行したい(8コアのマシンを使用しています)
私が理解していることから、MongoDbはノードごとに1つの実行スレッドのみを使用します。実際には、データセットをシリアルに実行しています。これは正しいです?
もしそうなら、map-reduceの実行ごとにプロセス/スレッドの数を構成できますか?map-reduceを並行して実行している複数のスレッドを管理してから結果を集計すると、パフォーマンスが大幅に向上します(誰かが試したことはありますか?)。そうでない場合-同じノードにDBの複数のレプリケーションを配置し、mongoDbを2つのレプリケーションで実行するように「トリック」することはできますか?
ありがとう!