Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Azure弹性缩放:拆分合并教程-Can';不要劈开碎片_C#_Azure_Azure Sql Database_Azure Elastic Scale - Fatal编程技术网

C# Azure弹性缩放:拆分合并教程-Can';不要劈开碎片

C# Azure弹性缩放:拆分合并教程-Can';不要劈开碎片,c#,azure,azure-sql-database,azure-elastic-scale,C#,Azure,Azure Sql Database,Azure Elastic Scale,我按照教程创建了所有提到的内容并部署了服务。我也能正常运行它 My Elastic DB当前包含一个范围碎片,其中MinValue设置为0,而MaxValue设置为无限(NULL) 然后把这个碎片一分为二。我做了以下工作: 使用与碎片1相同的架构创建了一个新数据库 运行该服务,它说目标数据库必须是碎片映射的一部分。失败 现在,为了在碎片映射管理器数据库中添加新的DB作为碎片,我下载了Nuget上提供的.Net API,修改了设置等,但它不会添加新的碎片,因为第一个碎片范围(0-无穷大)不允许。再

我按照教程创建了所有提到的内容并部署了服务。我也能正常运行它

My Elastic DB当前包含一个范围碎片,其中
MinValue
设置为
0
,而
MaxValue
设置为
无限(NULL)

然后把这个碎片一分为二。我做了以下工作:

  • 使用与碎片1相同的架构创建了一个新数据库
  • 运行该服务,它说目标数据库必须是碎片映射的一部分。失败
  • 现在,为了在
    碎片映射管理器数据库中添加新的DB作为碎片,我下载了Nuget上提供的.Net API,修改了设置等,但它不会添加新的碎片,因为第一个碎片范围(0-无穷大)不允许。再次失败:(
  • 现在我动手修改了实际的
    [\uu ShardManagement].[ShardMappingsGlobal]
    表本身,它在
    Shard Map Manager数据库中包含这些范围映射。我去了那里,将唯一的Shard的MaxValue列设置为,比如说,20。而这个Shard包含,比如说,最多30个Shard键
  • 现在再次运行下载的.NETAPI,将新的shard开始值指定为20-INFINITY
  • (我认为该服务现在将拆分shard 1,使用shard键21获取所有数据,并将插入shard 2中,因为它的MinValue是21。)

  • 再次运行该服务,并引发以下错误:

    源和目标映射都指向同一个shard“new_shard”

  • 嗯……这可能是因为第一个碎片的
    MaxValue
    和新碎片的
    MinValue
    是相同的

  • 现在,我为要拆分的第一个碎片更新了
    MaxValue=NULL(无穷大)
    。再次运行该服务,并收到以下错误:

    源和目标映射都指向同一个shard“new_shard”

  • 到底是怎么回事?为什么这么难?哪里有合适的文档

    这对我来说非常重要,如果能帮我把这该死的碎片分开,我将不胜感激


    谢谢。

    谢谢你关于拆分/合并的问题。让我们看看这是否有帮助:

    根据您上面记录的步骤,您似乎在步骤3中完成了两件事:

    • 将新数据库作为空碎片添加到碎片映射中,然后
    • 您试图分配一个指向新添加的碎片的映射
    第一部分(添加空碎片)应该已经成功,而第二部分(添加映射)在您的情况下可能会失败,因为到第一个碎片的现有映射已经覆盖了整个域

    如果到目前为止听起来还不错,您可以尝试以下步骤:

  • 将碎片贴图重置为原始状态,以便(0-无穷大) 范围再次指向第一个碎片。最好从头开始重新创建碎片贴图
  • 重新运行上面的步骤1) 使用您的模式创建一个干净的数据库
  • 通过如下调用将上一步中的干净数据库作为碎片添加到现有的碎片映射:shardmap.CreateShard(newshardlocation(shardServer,“your_clean_database”);。确保不要调用shardmap.CreateRangeMapping(.)。它是不需要的,它将再次失败,因为(0-无穷大)范围被分配给您的第一个碎片。拆分操作将更改映射作为其操作的一部分
  • 提交拆分操作 在任何情况下,请不要直接修改[_ShardManagement]表。它们通过从Nuget或拆分/合并工具中提取的库的API进行维护

    以下是一些指向其他文档的提示:

    • 拆分/合并概述:
    • 碎片映射管理API:
    希望这有帮助。如果您仍然遇到问题,请通过torsteng(at)microsoft(dot)com与我联系

    谢谢,
    Torsten

    非常感谢您的回答和链接。很抱歉我的回复太晚了,因为开斋节假期我不在家。我会这样做,并会通知你。再次感谢您的快速更新:我们已在此处发布了ShardManagement powershell模块以及一些示例脚本:。这将有助于您设置和查询现有的范围/列表映射。