如何将未分片集合迁移到分片集合

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

引起的