我一直在阅读有关拆分Mongo数据库并通过shards升级的信息,但我想是否有可能通过块在同一服务器中拆分mongo数据库并将其存储在不同的文件中,即碎片范围密钥将使用公式计算,考虑周数和当前年份(年)x54 +当前周数
让我们说2010x54 + 11 = 108551
理想情况下,我想要的是按月拆分文件,如下所示:
chunk01 (shardKeyID 108551 -> 108555) ----> Server1---> physical file 01
chunk02 (shardKeyID 108556 -> 108560) ----> Server1---> physical file 02
chunk03 (shardKeyID 108561 -> 108565) ----> Server1---> physical file 03
我试过在单个服务器上做这个,但是如果我设置了分片,我只是在DB中获得了一个文档的子集,这是有意义的,因为另一个部分将存储在另一个分片中在另一台服务器上。
任何想法?
答案 0 :(得分:0)
您可以通过在不同端口上运行单独的mongod
实例来在单个服务器上设置分片群集。说明可在this tutorial。
关于块的拆分,这由数据库自动处理。请注意,默认情况下,您的集合将使用64MB的默认块大小进行分片。查看更多详情here:
块大小是用户可配置的。但是,默认值为64 兆字节是大多数部署的理想选择。
您似乎在描述自己的算法何时平衡,这是不可能的。你真的需要把它留给cluster balancer来解决这个问题。
答案 1 :(得分:0)
MongoDB自动为每个数据库创建数据文件(称为范围);您无法按照建议控制哪些文档进入给定的物理数据文件。
Sharding在服务器群集中分配单个逻辑数据库,其中每个分片都由副本集(推荐)或单个mongod支持。您的choice of shard key确定将用于平衡分片间数据的属性,但同样您无法确定数据在物理数据文件中的位置。