Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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
如何在X个碎片之间平均分割SQL guid范围-C#_C#_Sql Server_Guid_Uniqueidentifier_Sharding - Fatal编程技术网

如何在X个碎片之间平均分割SQL guid范围-C#

如何在X个碎片之间平均分割SQL guid范围-C#,c#,sql-server,guid,uniqueidentifier,sharding,C#,Sql Server,Guid,Uniqueidentifier,Sharding,如何实现以下方法 public List<Tuple<SqlGuid, SqlGuid, int>> GetShardRanges(int numberOfShards); public List GetShardRanges(int numberOfShards); 假设UNIQUEIDENTIFIER介于00000000-0000-0000-0000-000000和FFFFFF-FFFF-FFFF-FFFF-FFFFFFFF之间(两者都包括) 元组的顺序如下:允

如何实现以下方法

public List<Tuple<SqlGuid, SqlGuid, int>> GetShardRanges(int numberOfShards);
public List GetShardRanges(int numberOfShards);
  • 假设UNIQUEIDENTIFIER介于00000000-0000-0000-0000-000000和FFFFFF-FFFF-FFFF-FFFF-FFFFFFFF之间(两者都包括)

  • 元组的顺序如下:允许的最低值、允许的最高值、碎片数(从1开始)


  • 碎片范围需要在碎片之间平均分割


另外,作为一个参考点,.NET GUID的排序不同于SQL GUID()

“碎片范围需要在碎片之间平均分割”-如果
numberofshard
不等于0模
2^128
?另外,我们应该考虑所涉及的guid类型吗?在我的例子中,numberOfShard总是一个大于0的偶数。我不确定我是否理解你所说的guid类型是什么意思。我只需要使用Guid和/或SqlGuid.NET类。有不同类型的Guid。例如,
Guid.NewGuid
始终创建类型4 Guid(SQL的
NEWID()
)。SQL的
NEWSEQUENTIALID()
创建类型1 Guid。如果说,你要求4个分片,我们根据类型分片,那么所有类型1的Guid最终都在一个分片中,所有类型2都在另一个分片中,等等。但是如果你只生成例如类型4的Guid,那么你正在处理的所有值最终都在一个分片中。它肯定是类型4的Guid。