47

66 億のバイグラムをコレクションにロードする必要がありますが、これを行うための最良の方法に関する情報が見つかりません。

多くのドキュメントを単一の主キー インデックスにロードすると、永遠に時間がかかりますが、私の知る限り、mongo はパーティショニングに相当するものをサポートしていませんか?

シャーディングは役に立ちますか? データ セットを多くのコレクションに分割して、そのロジックをアプリケーションに組み込む必要がありますか?

4

2 に答える 2

65

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

Mongo は数十億のドキュメントを簡単に処理でき、1 つのコレクションに数十億のドキュメントを含めることができますが、ドキュメントの最大サイズは 16mbであることを覚えておいてください。MongoDB には数十億のドキュメントを扱う多くの人々がおり、 MongoDB Google User Group ではそれについて多くの議論が行われています。気が変わって代わりに複数のコレクションを使用したい場合は、多数のコレクションの使用に関するドキュメントを参照してくださいコレクションが多ければ多いほど、インデックスも多くなりますが、これはおそらくあなたが望むものではありません。

これは、数十億のドキュメントを MongoDB に挿入することに関する Craigslistのプレゼンテーションと、その男のブログ投稿です。

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

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

シャーディングへの移行を適切に計画する必要があります。つまり、シャード キーの選択について慎重に検討する必要があります。この方法を使用する場合は、事前に分割してバランサーをオフにすることをお勧めします。物事のバランスを保つためにデータを移動するのは非生産的です。つまり、データを分割する方法を前もって決定する必要があります。さらに、いくつかのフィールドがシャーディングに役立つ、または主キーとして役立つという考えでドキュメントを設計することが重要な場合があります。

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

于 2012-07-05T10:44:05.710 に答える
8

MongoDB でデータを完全にシャーディングできます (シャード キーで N サーバーに分割されます)。実際、それは同社の核となる強みの 1 つです。アプリケーションでそれを行う必要はありません。

ほとんどのユースケースでは、66 億のドキュメントに対してこれを行うことを強くお勧めします。私の経験では、MongoDB は 1 つの大規模なサーバーよりも多数のミッドレンジ サーバーを使用した方がパフォーマンスが向上します。

于 2012-07-04T00:21:04.557 に答える