如何在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。