MongoDBにアキレス腱がある場合は、シングルスレッドの書き込みとシングルスレッドのmap-reduceのみをサポートしているという事実です。
いつものように、ここにはトレードオフがあります。シングルスレッド書き込みは、ロックの問題を回避し、オーバーヘッドを最小限に抑えるための最も簡単な方法です。同様に、マルチスレッドのmap-reduceは、データをロックするための優れた方法です。したがって、本番システムでのシングルスレッドのmap-reduceは、おそらくより簡単で安全です。
ただし、ここにはツールがないわけではありません。 MongoDBは、各インスタンスに1つの書き込みスレッドを提供します。したがって、MongoDBをシャーディングすると、シャードごとに1つの書き込みスレッドが得られます。
20億行に複数のインデックスが必要な場合は、とにかくシャーディングを検討する必要があります。ここで簡単に計算します。MongoIDは12バイトです。 MongoIDのインデックスは2B*12バイト=22GB+になります。さらに2つのインデックス(2つの4バイト整数でも)を追加したい場合は、それぞれ7.5GBについて話します。
つまり、20億行では、インデックスに37 GBを超える(最小)ということです。 )。ほとんどの8コアサーバーでは、これは、データはもちろん、インデックスをメモリに保持することさえできないことを意味します。
したがって、ここで本格的なパフォーマンスが必要な場合は、シャーディングを検討し始める必要があります。一般的な数値に基づいています。 FWIW、MySQLは2Bドキュメントの処理にもう熟練していません。大量のデータがあるため、実際には複数のサーバーが負荷に対応できるようにする必要があります。