我一直在考虑为我的数据选择最佳的分片键(通过复合索引),并认为将文档创建日期与客户编号(或发票编号)相结合会是一个不错的组合。如果MongoDB将客户编号视为字符串反向存储,那么:
90043 => 34009
90044 => 44009
90045 => 54009
etc.
在创建日期上建立索引可以确保相对较新的数据保存在内存中,而反向客户编号将帮助MongoDB在集群中分布数据/负载。
这个假设是正确的吗?如果是,我需要将客户编号反转才能按照我预期的方式进行分配吗?
我认为你的问题在于,你认为节点1比节点2更快。除非硬件有很大的不同,否则节点1和节点2的访问速度应该是相等的,因此反转字符串并不能帮助你解决问题。
我看到的主要问题与系统中的客户数量有关。这可能会导致单调分片,其中最后一个分片总是被访问,这可能会导致过多的拆分和迁移。如果您有大量的客户,则没有问题,否则您可能需要在客户ID和日期字段之上添加另一个键来更均匀地划分内容。我听说过有人使用随机标识符、哈希_id或使用GUID来解决这个问题。