“域”文档的好mongodb分片键

时间:2013-03-13 21:20:57

标签: mongodb sharding

我想为这样的文档找到一个合适的分片键:

{
  "_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”字段添加为复合分片键,以便通过已运行的作业分配它? / p>

是否可以将数组用作分片键?

感谢您的所有见解!

1 个答案:

答案 0 :(得分:2)

分片键不能是数组,因为分片键上的索引不能是多键索引。我当然认为你会希望“_id”(域)成为你的分片键的一部分,如果你能找到另一种方法来确保查询隔离,那么这将有所帮助。

我有点不确定为什么你担心域名分布均匀,因为域名往往是随机的,如果你期望拥有大量不同的域名,你应该处于良好状态形状。如果由于某种原因域名分发成为问题,您可以运行MongoDB 2.4.1并使用hashed shard key