0

次のようなドキュメントの適切なシャード キーを見つけたい:

{
  "_id": "yahoo.com",
  "c": {
    "en": {
      "bdy": ",
      "cats": [],
      "mDesc": "",
      "mHEq": {},
      "mKeyw": [],
      "mNames": {}

    }
  },
  "cLgth": 566,
  "cType": "text/html",
  "dTime": 1224,
  "jobsDone": [
    "rawdataload",
    "hrefanalyze",
    "metatagsanalyze",
    "keywordanalyze",
    "categoryfinder"
  ],
  "langs": [
    "en", "de"
  ],
  "publishedOn": {
    "sims": 1362752738996
  },
  "tld": "com",
}

私のユーザー向けのクエリは、主に _id によって mongo からドメインを取得しています。それらのいくつかは、ドメインの言語を使用しています バックエンドクエリは、さまざまな種類のジョブ「jobsDone」を実行します。この情報に基づいて、さまざまな範囲のドキュメントが選択されます。

そのため、カーディナリティが非常に高いため、ドメイン名にマップされる「_id」を使用することを考えました。ドメイン名の MD5 ハッシュを使用して、より均等に分散することは理にかなっていますか?

「クエリの分離」についてはそうではありません。ほとんどのユーザー クエリは _id を直接読み取るだけなので、問題ないと思います。ジョブ バックエンド クエリは、ユーザーが表示していないため、実行時間が長くなる可能性があります (分散/収集) が、これを最適化するために、「jobsDone」フィールドを複合シャード キーとして追加して、既に実行されているジョブによって分散することを考えました。

配列をシャード キーとして使用することは可能ですか?

すべての洞察に感謝します!

4

1 に答える 1

2

シャード キーのインデックスをマルチキー インデックスにすることはできないため、シャード キーを配列にすることはできません。「_id」(ドメイン)をシャードキーの一部にしたいと思うでしょう。クエリの分離を確実にする別の方法を見つけることができれば、これが役に立ちます。

ドメイン名はかなりランダムな傾向があるため、ドメイン名が均等に分散することを心配している理由が少しわかりません.非常に多数の異なるドメインがあると予想される場合は、良好な状態である必要があります. 何らかの理由でドメイン名の配布が問題になった場合は、MongoDB 2.4.1 を実行し、ハッシュされたシャード キーを使用できます。

于 2013-03-25T21:22:18.850 に答える