sql >> データベース >  >> NoSQL >> MongoDB

MongoDB:コレクション内の数十億のドキュメント

    最適なバルクインサートが何であるかを言うのは難しいです-これは、挿入するオブジェクトのサイズやその他の計り知れない要因に部分的に依存します。いくつかの範囲を試して、何が最高のパフォーマンスをもたらすかを確認できます。別の方法として、かなり高速なmongoimportを使用するのが好きな人もいますが、インポートデータはjsonまたはcsvである必要があります。データがBSON形式の場合、明らかにmongodrestoreがあります。

    Mongoは数十億のドキュメントを簡単に処理でき、1つのコレクションに数十億のドキュメントを含めることができますが、ドキュメントの最大サイズは16MBです 。 MongoDBには何十億ものドキュメントを持っている人がたくさんいて、MongoDBGoogleユーザーグループ 。これがドキュメント です。 気が変わって代わりに複数のコレクションが必要な場合は、読みたいコレクションを多数使用することについて。コレクションが多ければ多いほど、インデックスも多くなりますが、これはおそらくあなたが望むものではありません。

    これがプレゼンテーション です。 何十億ものドキュメントをMongoDBとその男のブログ投稿 。

    シャーディングはあなたにとって良い解決策のように見えますが、通常、シャーディングは複数のサーバー間でのスケーリングに使用され、書き込みをスケーリングしたい、またはワーキングセット(データとインデックス)を維持できないため、多くの人がそれを行いますRAM内。単一のサーバーから始めて、データが大きくなるか、追加の冗長性と復元力が必要になると、シャードまたはレプリカセットに移行するのが完全に合理的です。

    ただし、他のユーザーは、複数のmongodを使用して、書き込みが多い単一のmongodのロック制限を回避しています。明らかですが、それでも言う価値がありますが、マルチモンゴッドのセットアップは、単一のサーバーよりも管理が複雑です。ここでIOまたはCPUが最大になっていない場合、ワーキングセットはRAMよりも小さく、データのバランスを簡単に保つことができ(かなりランダムに分散)、改善が見られるはずです(単一サーバーでのシャーディングによる)。参考までに、メモリとIOの競合が発生する可能性があります。 2.2では同時実行性 が改善されました dbを使用ロック 、そのような展開の理由ははるかに少ないと思います。

    シャーディングへの移行を適切に計画する必要があります。つまり、シャードキーの選択について慎重に検討する必要があります。このようにする場合は、事前に分割してバランサーをオフにするのが最善です。バランスを保つためにデータを移動することは逆効果になります。つまり、データを分割する方法を事前に決定する必要があります。さらに、一部のフィールドがシャーディングに役立つ、または主キーとして役立つという考えでドキュメントを設計することが重要な場合があります。

    ここにいくつかの良いリンクがあります-



    1. 文字列としてMongoからBinDataUUIDを取得します

    2. MongoDb C#ドライバー、IListを実装するタイプのプロパティが保存されない

    3. OSXでのRSpecのロード時間は信じられないほど長い

    4. 日付フィールドでグループ化した後、2つの日付の間に欠落している月を追加するMongoDB集計