2012-04-18 2 views
1

これは私のlast questionに関連しています。MongoDB - 多数の文書

ユーザーあたり大量のデータを保存するアプリがあります。以前はデータの性質上、ユーザーごとに新しいデータベースを作成することにしました。これは大きなノーを必要としていたでしょう。データベース(おそらく何百万人) - 誰かがpointed out in a commentとして、これは間違ったデザインを示していることを示しています。

私たちはデザインを変更したので、各ユーザーの全情報を1つのコレクションに保存することを考えています。つまり、1つのコレクションが1人のユーザーに正確にマッピングされます。データベースごとに12,000のコレクションが利用できるため、DBごとに12,000人のユーザーを格納できます(この制限を大きくすることもできます)。

しかし、今私の質問です - いいえには何もありますか?コレクションに含めることができるドキュメントの数。ユーザーごとにデータを保存する必要があるため、膨大な(極端なケースでは何千万もの)膨大な数のデータを必要とします。ドキュメントごとのドキュメントの数。それはMongoDBと設計上問題ありませんか?

編集

お返事ありがとうございます。コレクションごとに大量の文書を使用することは問題ありません。

アプリは特化された在庫管理システムです。各ユーザーは大きな番号を持っています。それらに関連する情報のほんの一部ではありません。それぞれの情報には、そのカテゴリの下にカテゴリと関連するものがあります。さらに、2つのコレクションはお互いのデータを参照する必要がないため、複数のコレクションに触れるインデックスは必要ありません。

答えて

0

あなたのデザインはそれほど意味をなさない。各ユーザーを別々のコレクションに保管する理由

データにはどのようなインデックスがありますか?すべてのユーザーに共通のコンテンツを持つフィールドによってインデックスを作成している場合は、1つのインデックスを持つ単一のコレクションを持つことで、合計インデックスサイズを大幅に節約できます。

インデックスサイズは、パフォーマンスに関してはデータベースサイズの合計を制限する要因ではないことがよくあります。

なぜ、1人のユーザーあたり非常に多くのドキュメントがありますか?彼らはどれくらいの大きさですか?

CraigslistはMongoDBに2億以上の文書を格納するため、ハードウェアをサポートしていて索引では効率的ではない場合は問題にならないはずです。

あなたのスキーマをここに投稿した方が良いアドバイスを得るでしょう。

+2

ユーザーをコレクションに分けて保存するためのいくつかの利点があります。たとえば、 "user"と他の何かを常に照会する場合は、{user:1、something:1}にインデックスを付ける必要がありますが、別のコレクションでは{ 1}、スペースを節約し、クエリーをより速くします。私はこれを自分で行い、私がホスティングしている仮想ホストドメインごとに別々のコレクションを持っています。 –

+0

理にかなっているかもしれない少数の仮想ホストドメインに対しては、何百万という問題がありました。何百万ものコレクションを持つデータベースは、現在のMongoDB管理ツールを使用して管理できなくなります。 –

+0

Wes、あなたはいつも複合インデックスを持つことができました。また、「ユーザー/仮想ホスト/ someDomainObjectごとの1つのコレクション」モデルを使用すると、分析や集計が難しくなります。実際には、このモデルでは複数の索引ファイルが必要になるため、すべての文書を1つのコレクションに入れるだけで1つだけ必要になるため、スペースを節約することはできません。小さなオーバーヘッド(実際には、それは小さい)がありますが、そこにあります。さらに、n個の '_id'インデックスがあります。索引がRAMに格納されると、索引がRAMに収まらなくなるとすぐに問題が発生する可能性があります。したがって、1つの索引がアンロードされ、次に索引がロードされます。 –

2

あなたが持つことができるコレクション/インデックスの数を調整するには(〜24kが限界です~~ 12kは、デフォルトで_idインデックスがあるため、コレクションについて言うものですが、ネームスペースを使用するコレクション上で)、mongodを起動するときに--nssizeオプションを使用することができます。

コレクションには数十億ものドキュメントがたくさんあります(そして、何兆もあると確信しています)ので、「何千万ものもの」はうまくいくはずです。返されたカウントには64ビットの制約があるなど、いくつかの数字があります。したがって、2^64ドキュメントをヒットした後、いくつかの問題が発生する可能性があります。

どのような種類のクエリと更新の負荷がありますか。

関連する問題