我已经建立了我的第一个mongodb分片集群,最终处于创建数据库/集合并选择分片键的阶段。我已经阅读了有关如何选择适当的分片键的信息,并且可能会使用哈希索引,但是可能会有一些概念上的误解。
我的文档非常简单,其中包含文档ID(一些自然数),文档版本ID(一个自然数)和原始文本本身的字符串。如果我从文档中正确理解,我可以选择对文档ID进行分片,但这会导致庞大的分片,因为文档ID会增加,并且新文档会添加到同一分片中。因此,我可以将分片键设置为文档ID的哈希值。
我的问题是我是否仍然可以继续通过文档ID查询?我的大脑使我对此表示怀疑,并使我认为文档的索引位于散列的分片键之上,而不是文档ID之上。我希望哈希分片键严格用于分片,并且我可以设置要索引的任何键(即文档ID)。这是正确的吗?
答案 0 :(得分:0)
是的,您仍然可以通过分片键的值进行查询。
如果引用的是_id,它将自动使用其自然值编制索引,否则,除了分片索引之外,您还可以显式创建未哈希的文档ID并建立索引。
只要您测试一个或多个明确的值列表是否相等,就应使用最少数量的分片来处理查询。
但是,如果使用$ gte之类的远程测试,则必须将查询转发到要处理的每个分片。
使用散列的文档ID作为分片键将导致除了其他索引以外,还为散列值创建索引。
有一个很好的描述