如何将未分片集合迁移到分片集合
How to migrate a unsharded collection to sharded collection
如何将现有的 未分片 集合迁移到 分片 集合,同时将 Cosmos DB 与 mongo [=16] 一起使用=] ?
执行此操作的唯一方法是将数据从第一个集合复制到新的分片集合。您可以使用 mongoexport/import 或您想要执行此操作的任何工具。
抱歉耽搁了,我刚刚在我的系统上测试了它,收集了 3000 万份文档:
db.getSiblingDB('data').getCollection("sessions.unsharded").getShardDistribution()
Collection data.sessions.unsharded is not sharded.
db.getSiblingDB('data').getCollection("sessions.unsharded").estimatedDocumentCount()
29073126
sh.shardCollection('data.sessions.unsharded', {tsi: 1, si: 1})
{
"collectionsharded" : "data.sessions.unsharded",
"ok" : 1,
"operationTime" : Timestamp(1646225768, 20018)
}
收集均匀分布需要一些时间,但一段时间后
db.getSiblingDB('data').getCollection("sessions.unsharded").getShardDistribution()
Shard shard_03 at shard_03/d-mipmdb-sh1-03.swi.srse.net:27018,d-mipmdb-sh2-03.swi.srse.net:27018
data : 87.04MiB docs : 28300 chunks : 3
estimated data per chunk : 29.01MiB
estimated docs per chunk : 9433
Shard shard_01 at shard_01/d-mipmdb-sh1-01.swi.srse.net:27018,d-mipmdb-sh2-01.swi.srse.net:27018
data : 99.08MiB docs : 18893 chunks : 2
estimated data per chunk : 49.54MiB
estimated docs per chunk : 9446
Shard shard_02 at shard_02/d-mipmdb-sh1-02.swi.srse.net:27018,d-mipmdb-sh2-02.swi.srse.net:27018
data : 88.13MiB docs : 28335 chunks : 3
estimated data per chunk : 29.37MiB
estimated docs per chunk : 9445
Shard shard_04 at shard_04/d-mipmdb-sh1-04.swi.srse.net:27018,d-mipmdb-sh2-04.swi.srse.net:27018
data : 96.24GiB docs : 29073126 chunks : 3072
estimated data per chunk : 32.08MiB
estimated docs per chunk : 9463
Totals
data : 96.5GiB docs : 29148654 chunks : 3080
Shard shard_03 contains 0.08% data, 0.09% docs in cluster, avg obj size on shard : 3KiB
Shard shard_01 contains 0.1% data, 0.06% docs in cluster, avg obj size on shard : 5KiB
Shard shard_02 contains 0.08% data, 0.09% docs in cluster, avg obj size on shard : 3KiB
Shard shard_04 contains 99.72% data, 99.74% docs in cluster, avg obj size on shard : 3KiB
所以,我不明白为什么会出现此错误。可能是由 Cosmos DB API
引起的
如何将现有的 未分片 集合迁移到 分片 集合,同时将 Cosmos DB 与 mongo [=16] 一起使用=] ?
执行此操作的唯一方法是将数据从第一个集合复制到新的分片集合。您可以使用 mongoexport/import 或您想要执行此操作的任何工具。
抱歉耽搁了,我刚刚在我的系统上测试了它,收集了 3000 万份文档:
db.getSiblingDB('data').getCollection("sessions.unsharded").getShardDistribution()
Collection data.sessions.unsharded is not sharded.
db.getSiblingDB('data').getCollection("sessions.unsharded").estimatedDocumentCount()
29073126
sh.shardCollection('data.sessions.unsharded', {tsi: 1, si: 1})
{
"collectionsharded" : "data.sessions.unsharded",
"ok" : 1,
"operationTime" : Timestamp(1646225768, 20018)
}
收集均匀分布需要一些时间,但一段时间后
db.getSiblingDB('data').getCollection("sessions.unsharded").getShardDistribution()
Shard shard_03 at shard_03/d-mipmdb-sh1-03.swi.srse.net:27018,d-mipmdb-sh2-03.swi.srse.net:27018
data : 87.04MiB docs : 28300 chunks : 3
estimated data per chunk : 29.01MiB
estimated docs per chunk : 9433
Shard shard_01 at shard_01/d-mipmdb-sh1-01.swi.srse.net:27018,d-mipmdb-sh2-01.swi.srse.net:27018
data : 99.08MiB docs : 18893 chunks : 2
estimated data per chunk : 49.54MiB
estimated docs per chunk : 9446
Shard shard_02 at shard_02/d-mipmdb-sh1-02.swi.srse.net:27018,d-mipmdb-sh2-02.swi.srse.net:27018
data : 88.13MiB docs : 28335 chunks : 3
estimated data per chunk : 29.37MiB
estimated docs per chunk : 9445
Shard shard_04 at shard_04/d-mipmdb-sh1-04.swi.srse.net:27018,d-mipmdb-sh2-04.swi.srse.net:27018
data : 96.24GiB docs : 29073126 chunks : 3072
estimated data per chunk : 32.08MiB
estimated docs per chunk : 9463
Totals
data : 96.5GiB docs : 29148654 chunks : 3080
Shard shard_03 contains 0.08% data, 0.09% docs in cluster, avg obj size on shard : 3KiB
Shard shard_01 contains 0.1% data, 0.06% docs in cluster, avg obj size on shard : 5KiB
Shard shard_02 contains 0.08% data, 0.09% docs in cluster, avg obj size on shard : 3KiB
Shard shard_04 contains 99.72% data, 99.74% docs in cluster, avg obj size on shard : 3KiB
所以,我不明白为什么会出现此错误。可能是由 Cosmos DB API
引起的