MongoDbにシャーディングを実装したいので、いくつかの提案が必要です。
洞察
- マシンに関するさまざまな情報を収集し、それらを独自のコレクションに書き込むcronジョブがたくさんあります。
- コレクションは動的に作成されます。
- 各コレクションには数百万のデータがあります。
- 各コレクションのStructure1は、Name、Category、Subcategory、NodeId、Process-Start-Time、Process-End-Time、Valueです。
- 各コレクションのStructure2は、Name、Category、Subcategory、Subtype、Date、Valueです。
- 各コレクションのStructure3は、Name、Category、Subcategory、NodeId、Process-Start-Time、Process-End-Time、Value、Flag1、Flag2、Flag3です。
調査の結果、シャーディングを使用し、複数のサーバーで役立つようにすることがわかりました。これにより、次の2つのことが保証されます。
- スペースが足りなくなる心配はありません。
- サーバー間でバランスの取れたパフォーマンス
質問1: 私の問題は、データを分割するための正しいシャードキーを見つけることです。デフォルトのObjectId以外のunique-keyがコレクションに表示されません。さらに読んだ後、複合キーを使用できることがわかりました。値がObjectIdのように見えるキーとして、複合キーまたはカスタムObjectIdを使用することは理にかなっていますか。_。これは、クエリの結果を返し、チャンクを移動するパフォーマンスに関して非常に重要です。
質問2: コレクションが大きいため、コレクションを動的に作成するときに、Mongoコンソールで毎回シャードを設定するのが難しくなります。シャードデータベース用にコレクションが作成されるたびに、そのコレクションのシャードキーを定義するように、mongoで自動化する方法はありますか?
質問3: シャードキーをクエリ式に渡す必要が本当にありますか?クエリ式でObjectIdを使用したことはないと思います。データが従来のDBのように構造化されていないため、一意のIDを使用できるとは思えません。はいの場合、次のようなクエリにどのように役立ちますか。
例:
{カテゴリ: "エネルギー"、サブカテゴリ: "ワット"、プロセス開始時間:{$ gte:132234234}}
ステップインしてこの問題の修正を手伝ってくれてありがとう。