我按照教程here创建了所有提到的内容并部署了服务。我也可以正常运行它。
我的弹性数据库目前包含一个范围分片,其中MinValue
设置为0
,MaxValue
设置为Infinity (NULL)
。
然后将此碎片实际拆分为两个。我做了以下事情:
Shard Map Manager Database
中添加新数据库作为分片,我在Nuget package下载了.Net API,修改了设置等,但它不会添加新的分片作为第一个分片范围(0 - INFINITY)不允许它。再次失败:( [__ShardManagement].[ShardMappingsGlobal]
表本身,其中包含Shard Map Manager Database
中的这些范围映射。我去了那里,将唯一的碎片的MaxValue列设置为,例如,20。虽然这个碎片包含,例如,分片密钥最多30个。(我认为该服务现在会分割分片1,使用分片键21获取所有数据,并在其MinValue为21时插入分片TWO。)
再次运行服务,它抛出以下错误:
源映射和目标映射都指向同一个碎片'new_shard'。
嗯......这可能是因为第一个分片的MaxValue
和新分片的MinValue
是相同的。
现在我去更新了我要拆分的第一个碎片的MaxValue = NULL (INFINITY)
。再次运行服务,并收到以下错误:
源映射和目标映射都指向同一个碎片'new_shard'。
到底是怎么回事?为什么这么难?适当的文件在哪里?
这对我来说非常重要,我很感激任何分裂该死的碎片的帮助。
感谢。
答案 0 :(得分:3)
感谢您关于拆分/合并的问题。让我们看看这是否有帮助:
根据您在上面记录的步骤,您似乎最终在步骤3中做了两件事:
第一部分(添加空分片)应该已经成功,而第二部分(添加映射)会因为现有映射到已覆盖整个域的第一个分片而失败。
如果到目前为止这听起来不错,您可以尝试以下步骤:
在任何情况下,请不要直接修改[__ShardManagement]表。它们通过您从Nuget或Split / Merge工具中提取的库的API进行维护。
以下是其他文档的几点建议:
希望这会有所帮助。如果您仍然遇到问题,请通过torsteng(at)microsoft(dot)com离线联系我。
谢谢, 托