【问题标题】:good mongodb shard key for "domain" document“域”文档的好 mongodb 分片键
【发布时间】:2013-03-13 21:20:56
【问题描述】:

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

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

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

感谢所有见解!

【问题讨论】:

    标签: mongodb sharding


    【解决方案1】:

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

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

    【讨论】:

    • 我将 _id 与新的散列分片键一起使用,效果非常好。我们很好地分发了 120M 文档。
    猜你喜欢
    • 1970-01-01
    • 2012-10-09
    • 2018-09-15
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多