我们需要2个mongo db shard服务器(每个3个副本集)。
我们创建了Sharded集合并插入了200k文档。平衡器在该窗口中被禁用,我们在第一次测试后启用它并再次开始插入。
在第一次测试中,所有数据都插入到一个碎片中,我们在mongolog中收到了很多警告: -
splitChunk找不到块[{条款ArticleID:MinKey,的sessionId:MinKey},{条款ArticleID: “59830791”,的sessionId “fb0ccc50-3d6a-4fc9-aa66-e0ccf87306ea”})来分割,块边界可以陈旧
日志中提到的原因可能是低基数分片键
在平衡器开启后的第二次和第三次测试之后,两个分片上的数据均衡。
我们又进行了一次测试,并在此测试中再次停止了平衡器,数据进入两个分片,甚至平衡器关闭(pageIds是读取器ID,从旧测试重复,以及两个新的ID)
请问这个机制是如何工作的,因为当密钥的基数良好时,无论平衡器是ON还是OFF,数据都应该进入两个分片。
Shard Key是: - (pageid)和(unique readerid)
以下是插入统计信息: -
页面阅读时长200k
唯一网页ID 2000
Unqiue会话阅读页面持续时间: - 70000
提前致谢!
答案 0 :(得分:0)
为数据库启用分片时,将为每个数据库分配主分片。 如果将平衡器的数据插入为禁用,则所有数据都将进入主分片。当您的数据增长并且将创建块时,Mongo Split将计算分割点。
我们又进行了一次测试并在此测试中再次停止了平衡器,数据正在进行中 在两个分片中甚至平衡器都关闭了(pageIds是读者ID) 从旧测试中重复以及两个新的ID)
数据已经以块的形式分发,这些块在两个分片之间分布很好。如果您的分片键的范围也在各个块之间均匀分布,那么任何新文档都将进入相应的块,这将导致均匀的数据分发。