JYKetamaHash 1.0.0
dotnet add package JYKetamaHash --version 1.0.0
NuGet\Install-Package JYKetamaHash -Version 1.0.0
<PackageReference Include="JYKetamaHash" Version="1.0.0" />
paket add JYKetamaHash --version 1.0.0
#r "nuget: JYKetamaHash, 1.0.0"
// Install JYKetamaHash as a Cake Addin #addin nuget:?package=JYKetamaHash&version=1.0.0 // Install JYKetamaHash as a Cake Tool #tool nuget:?package=JYKetamaHash&version=1.0.0
JYKetamaHash
Hash一致实现负载均衡 已经上传nuget(JYKetamaHash)
使用方法:
1.直接将数据发网服务端
hashRing.GetCurrent();
2.将字符串Key映射到服务端
hashRing.GetStoreNode(key)
3.将其它类型Key映射到服务端
byte[]k=你的转换方式(k)
hashRing.GetStoreNode(key)
需要将Key转换(序列化为byte[])
使用前需要将真实节点插入 ConsistencyRing hashRing = new ConsistencyRing(); hashRing.AddNode();
1.保持以前的代码,主要是网上找到的
2.优化算法,结合MurmurHash以及红黑树存储,专门的接口。
3.经测试,在小集合中,使用sortedlist更加高速。
4.使用了网友的红黑树,但是测试没有意义,红黑树需要遍历返回比当前key大的最近一个,很慢
5.经整合,在红黑树上添加了sortedlist维持数据,更加高效合理。
6.当前数据量百万级分片没有意义,源码中有说明。
7.已经尽可能优化,基本符合功能。所以采用Murmur算法能够加快速度。但是底层集合还是网上的sortedlist合理。
8.底层sortedlist返回比当前大的key,不能用网上的方法,而是自己写一个二分法查找,网上直接用linq不合理,用plinq也无意义
2018-12-21整合升级
1.首先是歉意.
2.我没有真正理解红黑树的算法含义,所以在使用期满足Hash一致时,没有找到合适的方法返回大于Key并且是最近的那个节点。
3.最近一天测试,发现有合理快速的办法返回最近的Key(也就是Hash环右侧的Key).很快速,因此恢复了使用红黑树,没有再使用sortedlist。
4.虽然我提供了TailMap方法,但是测试很慢(不影响Hash一致算法),不知道是不是我还是没有理解红黑树,没有找到最合适的方法返回。该功能是返回大于Key的所有数据节点。
5.总体说就是除了上次的第4嗲是错误的,其余还是支持的。
说明:如果有谁理解红黑树,请帮我完善TialMap方法。当前我的办法是找到第一个比当前Key大的节点,然后以此节点为基础,遍历其下面的所有节点,找到符合的节点。但是真的蛮。
2018-12-22
添加了java的实现方法,但是没有使用,只是当做参阅
2018-12-19 扩展了2个方法方便使用,更加符合c#方式
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.0.0 | 649 | 2/17/2019 |