2

スケーラブルで最高の読み取りパフォーマンスを持つ MongDB コレクションを作成するための最良のアプローチは何ですか? 以下は仮定です

  • ユーザーは 1 日あたり 100 エントリを持っています。エントリはユーザー専用です。
  • 200,000 人のユーザーがいるかもしれません。したがって、ほぼ 200 * 200,000 = 1 日あたり 2,000 万のエントリになります。
  • ユーザーは、エントリが挿入されるとすぐにエントリを表示することを好みます。
  • ユーザーは、データが 3 か月前のものであっても、自分のエントリを検索することを好みます。3 か月で、2,000 万 * 90 = 1 億 8,000 万のエントリ。
  • 更新はありません。挿入と削除のみ。

私たちの心の選択肢。

  • ユーザー名に基づくシャーディング。A .. 1 つのシャードで D など。しかし、それでもスケーリングは非常に困難です。
  • ユーザーごとに 1 つのコレクションを作成します。それが抜本的なアプローチであることはわかっていますが、そうではないのはなぜですか。ユーザーデータ全体の集計は行っていません。MongoDB でのコレクション数の制限

任意の提案をいただければ幸いです。ありがとう。

4

2 に答える 2

3

残念ながら、所有できる名前空間の数に は制限があるため (24,000)、ユーザーごとに 1 つのコレクションは機能しません。

良い方向性がいくつかあると思います。均一に配布されるシャード キーを使用することをお勧めします。ユーザー名が適しています。スケーラビリティについてどのような懸念がありますか?

TTL (Time to Live) コレクションと、アプリケーションがセカンダリから読み取れるようにするための読み取り設定を確認することをお勧めします。これにより、ワークロードが分散され、クエリ時間が短縮されます。

于 2012-10-11T18:23:52.623 に答える
1

MongoDB の世界では、最適なスキーマ設計はありません。MongoDB では、スキーマの設計は、アプリケーションがデータにアクセスする方法によって異なります。

以下は、MongoDB の適切なスキーマを設計するために回答する必要がある重要な質問です。

  • どのくらいのデータを持っていますか?
  • 最も一般的な操作は何ですか? 主に新しいデータの挿入、既存のデータの更新、またはクエリの実行を行いますか?
  • 最も一般的なクエリは何ですか?
  • 最も一般的なアップデートは何ですか?
  • 1 秒あたり何回の I/O 操作が予想されますか?

MongoDB では、多くの選択肢があります。データを埋め込む、リンクされた関係を作成する、データを複製して非正規化する、またはハイブリッド アプローチを使用することができます。

@Shelman はすでに「読み取り設定」について言及しており、これはセカンダリを利用するという点で一見の価値があるものです。

スケールアウトという点では、シャーディングが適しているように見えます。シャーディングに関するMongoDB マニュアルは非常に広範で、アーキテクチャ、基礎、展開、管理、および内部 (非常に熱心な場合) をカバーしています。読むことを強くお勧めします。ただし、@Shelman が言ったように、シャード キーを賢く選択する必要があります。このトピックは、StackOverflow およびMongoDB Google User Groupで広く取り上げられています。

シーケンシャル シャード キーを避ける理由の 1 つは、挿入時にホットスポットが作成されることです。常に、単一のシャードがすべての挿入負荷を処理します。複合シャード キーを選択することもできます。これについては、Google グループでいくつかの良い議論があります。

{ username : 1 , timestamp : 1 } のようなものを選択すると、必要に応じてユーザーのデータが多くのチャンクに分割され、サーバー全体に分散されます。

これは、シャード キーの選択に関するドキュメントへの正確なリンクです。

=============================

以下は、MongoDB スキーマ設計に関する優れた一般的なリファレンスです。

MongoDB プレゼンテーション:

これは、MongoDB スキーマ設計に関する本で、役に立つと思います。

いくつかのサンプル スキーマ設計を次に示します。

=============================

MongoDB スキーマ設計で「バケット」アプローチを使用する例を次に示します。

=============================

最後に、MongoNYC からの最近のシャーディング プレゼンテーション:

于 2012-10-17T21:14:59.980 に答える