2

非常に大きくなる可能性のあるコレクションがあります。これで、MongoDB には実際には問題がないことがわかりましたが、非常に大きなデータセットを快適に処理できるスキーマを設計する方法がよくわかりません。ということで、問題の概要を説明します。

私たちは、お客様のために大量のデータを収集しています。基本的に、このデータを収集すると、3 タプル (a、b、c) として表されます。ここで、b と c はそれぞれセット B と C のメンバーです。この特定のケースでは、B セットと C セットは時間の経過とともにあまり大きくならないことがわかっています。現在の顧客については、約 200,000 人のメンバーについて話しています。ただし、Aセットは時間の経過とともに成長し続けるものです. 現在、顧客あたり約 2,000,000 人のメンバーがいますが、これは (おそらく急速に) 成長する予定です。また、b->a と c->a の間には 1->n の関係があります。

このデータ セットのワークロードは、基本的に 3 つのユース ケースに分割されます。コレクションは定期的に更新され、A が最も多くの書き込みを取得し、B と C はいくつかの書き込みを取得しますが、多くはありません。2 番目のユース ケースは、B へのランダム アクセスであり、B の b \ に関連する C のいくつかのドキュメントを集約します。最後のユース ケースは、基本的に A と B から大きなサブセットをストリーミングして、新しいデータを生成します。

私たちが直面している問題は、インデックスがかなり大きくなっているということです。現在、約 8 人の小規模な顧客とのテスト セットアップがあり、現時点での合計データセットのサイズは約 15 GB で、インデックスは約 3 GB から 4 GB で実行されています。ここでの問題は、データセットに実際にはホット ゾーンがないことです。基本的に、すべてのドキュメント間で負荷が均等に分散されます。

基本的に、これを行うには 2 つのオプションを考え出しました。上で説明したもので、すべての顧客のすべてのデータが 1 つのコレクションに積み上げられています。これは、そのコレクション内のドキュメントを特定の顧客にリンクするフィールドのインデックスを作成する必要があることを意味します。

その他のオプションは、すべての b と c をまとめて (これらのセットは比較的小さい)、顧客ごとに 1 つの C コレクションを分割することです。この最後のソリューションは管理が少し難しいと想像できますが、複数の顧客のデータに同時にアクセスすることはめったにないため、メモリの問題を防ぐことができます. MongoDB は、customers インデックスをメモリにロードして、そこから実行することができます。

これについてどう思いますか?

PS: これが漠然としすぎていないことを願っています。不明な点があれば、さらに詳しく説明します。

4

1 に答える 1

1

より大きなセット (私が正しく従った場合は A) は、合理的に独自のデータベースに入れることができるように思えます。コレクションではなくデータベースと言ったのは、2.2 がリリースされたので、使用頻度の高いデータベースと他のデータベースとの間のロックの競合を最小限に抑えたいからです。そのためには、別のデータベースが最適です (2.2 でデータベース レベルのロックが導入されました)。もちろん、これは単一のレプリカ セット モデルから見たものです。

また、インデックスのサイズは、データ サイズに比例していないように思えます。それらはすべて必要ですか? 不要なインデックスを削除し、複合インデックスを組み合わせて使用​​すると、インデックスの増加という点で直面している問題が大幅に軽減される可能性があります (更新と挿入の効率も向上する可能性があります)。これには本当に詳細が必要であり、おそらく別の質問、またはおそらく mongodb-user グループのスレッドに属しているため、複数の目で見て提案を行うことができます。

シャーディングの可能性を考慮した場合、本当に重要な部分は、頻繁に一緒にアクセスする必要がある部分の局所性がシャード上で確実に保持されるようにするシャード キーを選択することです。これは、単一のシャード コレクションに適しています (複数の関連するシャード コレクション間で局所性を維持することは、何らかの方法でチャンクを手動で分割してバランスをとらない限り、非常にトリッキーになります)。シャーディングを使用すると、インデックスが単一インスタンスの制限に達した場合などに水平方向にスケールアウトできますが、シャード キーの決定が非常に重要になります。

繰り返しになりますが、そのシャード キーを選択するための詳細は、前述の潜在的なインデックス レビューと同様に、このより一般的な議論の範囲を超えています。

于 2012-08-31T13:59:37.683 に答える