0

我浏览了文档,找不到明确的答案

假设我在 [a,b,c] 上有一个稀疏索引

  1. 是否会将具有“a”“b”字段但没有“c”的文档插入索引?

  2. 在最新的 mongodb 版本中是否必须有分片键索引?

  3. 如果是这样,是否可以使用上述复合稀疏索引在 [a] 上进行分片?(说a,b将永远存在)

4

1 回答 1

0
  1. 如果c不存在,并且查询c在查询计划中使用索引,则不会找到文档,因为它不存在于索引中。
  2. 分片键必须被索引并且是唯一的。还可以查看分片参考文档shard key上的注释,它说

理想的分片键:

很容易被分割,这使得 MongoDB 很容易在分片之间分发内容。具有有限数量可能值的分片键并不理想,因为它们可能导致某些“不可拆分”的块。有关详细信息,请参阅基数部分。将在集群之间分配写操作,以防止任何单个分片成为瓶颈。出于这个原因,与插入时间高度相关的分片键是不好的选择;然而,具有更高“随机性”的分片键更能满足这一要求。有关其他背景信息,请参阅写入缩放部分。将使 mongos 可以直接从单个特定的 mongod 实例返回大多数查询操作。您的分片键应该是您的查询使用的主要字段,因此,具有高度“随机性”的字段是不好的选择。有关具体示例,请参阅查询隔离部分。

所以如果假设,如果 mongo 接受一个稀疏索引作为 shard key,mongo 将不知道在哪里放置不适合索引的文档。有人可以争论,为此目的将它们全部放在另一个碎片中。反驳的论点是,如果它长大了会发生什么......因此我认为这样做没有意义,即使它是允许的。

3-我怀疑稀疏索引会起作用,因为分片需要唯一索引,而稀疏索引不符合标准。唯一索引要求,我在文档中没有找到,但如果你使用 mongo admin shell 帮助,它会告诉你。

于 2012-12-21T00:13:42.313 回答