go-jump-consistent-hash, 快速,最小的内存,一致的哈希算法

分享于 

3分钟阅读

GitHub

  繁體 雙語
Fast, minimal memory, consistent hash algorithm
  • 源代码名称:go-jump-consistent-hash
  • 源代码网址:http://www.github.com/renstrom/go-jump-consistent-hash
  • go-jump-consistent-hash源代码文档
  • go-jump-consistent-hash源代码下载
  • Git URL:
    git://www.github.com/renstrom/go-jump-consistent-hash.git
    Git Clone代码到本地:
    git clone http://www.github.com/renstrom/go-jump-consistent-hash
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/renstrom/go-jump-consistent-hash
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    跳转一致哈希

    Build StatusGodoc

    跳转一致哈希算法 [1]的Lamping和 Eric Veach的实现。

    [1] http://arxiv.org/pdf/1406.2294v1.pdf

    用法

    import jump "github.com/renstrom/go-jump-consistent-hash"funcmain() {
     h:= jump.Hash(256, 1024) // h = 520}

    包含用于使用 string 作为键而不是 uint64的helper 函数。 这要求hasher将字符串计算为 Hash() 所接受的格式。 使用 CRC-64 ( ECMA )的hasher也包含了方便。

    h:= jump.HashString("127.0.0.1", 8, jump.CRC64) // h = 7

    实际上,虽然你可能希望使用 Hasher,这样你就不必重复bucket大小和使用哪个键 hasher。 它还使用更方便的类型,比如 int 而不是 int32

    hasher:= jump.New(8, jump.CRC64)h:= hasher.Hash("127.0.0.1") // h = 7

    如果要使用自己的算法,必须实现 KeyHasher 接口,它是标准库中可用的hash.Hash64 接口的一个子集。

    下面是一个定制的KeyHasher 示例,它使用了 google FarmHash 算法( CityHash的继承者)的来计算最终的键。

    typeFarmHashstruct {
     buf bytes.Buffer}func(f *FarmHash) Write(p []byte) (nint, errerror) {
     return f.buf.Write(p)
    }func(f *FarmHash) Reset() {
     f.buf.Reset()
    }func(f *FarmHash) Sum64() uint64 {
     // https://github.com/dgryski/go-farmreturn farm.Hash64(f.buf.Bytes())
    }hasher:= jump.New(8, &FarmHash{})h:= hasher.Hash("127.0.0.1") // h = 5

    许可证

    MIT


    fast  CONS  算法  Minim  minima  MEMO  
    相关文章