我查看了文档,但找不到明确的答案
假设我在[a,b,c]
上有一个稀疏索引将带有“a”“b”字段但不是“c”的文档插入索引吗?
在最新的mongodb版本中是否必须将分片键编入索引?
如果是这样,是否可以使用上述复合稀疏索引对[a]进行分片? (说a,b将永远存在)
答案 0 :(得分:0)
c
不存在,并且查询在查询计划中使用c
索引,则找不到文档,因为索引中不存在该文档。shard key
上的说明,它说理想的分片键:
很容易被分割,这使得MongoDB很容易分发 碎片中的内容。分片数量有限的分片键 可能的值并不理想,因为它们可能导致一些块 是“不可分割的”。有关更多信息,请参阅基数部分。 将在集群之间分配写操作,以防止任何 单个碎片成为瓶颈。具有高的碎片键 因此,与插入时间的相关性是不好的选择; 但是,具有更高“随机性”的分片键满足此要求 要求更好。有关其他信息,请参阅Write Scaling部分 背景。将使mongos可以返回大多数查询 直接从单个特定mongod实例进行操作。你的碎片 key应该是查询使用的主要字段,以及字段 由于这个原因,高度的“随机性”是糟糕的选择。看到 查询隔离部分用于特定示例。
所以如果假设,如果mongo接受稀疏索引作为分片键,mongo将不知道在哪里放置不适合索引的文档。有人可以说,为了这个目的,把它们全部放在另一个碎片中。反驳的论点是,如果它超出了会发生什么......因此我认为这样做是不合理的,即使它是允许的。
3-我怀疑稀疏索引是否有效,因为分片需要唯一索引且稀疏索引不符合条件。唯一的索引要求,我没有在文档中找到,但如果你使用mongo admin shell帮助,它会告诉你它。