我按照这里的教程创建了所有提到的东西并部署了服务。我也可以正常运行。
我的弹性数据库当前包含一个范围分片,MinValue
设置为0
,并MaxValue
设置为Infinity (NULL)
。
然后将这个分片实际分成两个。我做了以下工作:
- 创建了一个与分片 1 具有相同架构的新数据库
- 运行服务,它说目标数据库必须是分片映射的一部分。失败的 !!!
- 现在要将新数据库添加为分
Shard Map Manager Database
片,我下载了 Nuget包中可用的 .Net API ,修改了设置等,但它不会添加新分片,因为第一个分片范围(0 - INFINITY)不允许它。再次失败:( - 现在我动手修改了
[__ShardManagement].[ShardMappingsGlobal]
包含这些范围映射的实际表本身Shard Map Manager Database
。我去那里并将唯一分片的 MaxValue 列设置为,比如说,20。虽然这个分片包含,比如说,最多 30 个分片键。 - 现在再次运行下载的 .Net API,将新的分片起始值指定为 20 - INFINITY。它起作用了,新的分片已在 SMM DB 中注册。
(我认为该服务现在将拆分 shard 1,获取所有具有 sharding key 21 的数据,并将插入到 shard TWO 中,因为它的 MinValue 为 21。)
再次运行服务,它抛出了以下错误:
源和目标映射都指向同一个分片“new_shard”。
嗯......可能是因为第MaxValue
一个碎片和MinValue
新碎片是相同的。
现在我去更新了
MaxValue = NULL (INFINITY)
我想要拆分的第一个分片。再次运行服务,并收到以下错误:源和目标映射都指向同一个分片“new_shard”。
这到底是怎么回事?为什么这么难?合适的文档在哪里?
这对我来说非常重要,如果能在拆分该死的碎片方面提供任何帮助,我将不胜感激。
谢谢。