Skip to content

ShowHash 用于测试和展示 hash 算法在值区间里是否分布比较均衡。同时可以显示一个指定的 KEY 在经过 hash 后被散列到了值区间的相对位置

License

Notifications You must be signed in to change notification settings

beihai23/ShowHash

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

关于ShowHash

ShowHash 用于测试和展示 hash 算法在值区间里是否分布比较均衡。同时可以显示一个指定的 KEY 在经过 hash 后被散列到了值区间的相对位置

有了 showhash 可以在应用一致性 hash 的分布式系统中方便的确定节点服务的 KEY。

使用说明

[nobugtodebug@localhost ~]$ ./ShowHash

得到类似以下的输出结果:

 [100 %] CalculateHash finished.
****************************************************************************************************
****************************************************************************************************
****************************************************************************************************
****************************************************************************************************
****************************************************************************************************
****************************************************************************************************
****************************************************************************************************
****************************************************************************************************
****************************************************************************************************
****************************************************************************************************
****************************************************************************************************
****************************************************************************************************
*************************************************** ************************************************
*************** ****************** ******** ******  ******************** ******* * * ***************
**** * ******** * *** * ******* *    ** **  ******  ****   ** *  **  **  ***** * *   * * ** *** * **
** * *     * ** * **    *   **  *     * *    ** *   *      *  *      **  * *   *         *  ***
   *       * *  * *             *     *      **                          *
             *
----------------------------------------------------------------------------------------------------->

上面的输出显示 Hash 值在值区间的分布情况。

订制

应用不同的 hash 算法

只要修改 hash.py 文件。hash.py必须提供如下两个方法:

def MaxValue():
    '''返回整数表示的hash算法的最大取值'''
    return 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

def Sum(key):
    '''计算 hash 并返回大整数表示的 hash 值'''
    m = hashlib.md5()
    m.update(key)
    hashvalue = m.hexdigest()

    return eval("0x"+hashvalue), hashvalue

Sum() 方法的参数 key 是byte[]. 经过 hash 后返回大整数表示的 hash 结果和字符串表示的结果,字符串结果是为了方便调试显示用的。

设置待测试的 key

修改 ShowHash.py 文件的如下变量和方法:

# 哈希值在分布轴上显示的粒度,既多少个值显示成一个点
GRANULARITY            = 10

def PrepareKey():
    '''产生并返回待测试的 key list'''
    return range(0, 14500)
  • PrepareKey 方法返回一个 list,该 list 可以是一系列的数值,也可以是字符串。如果混合两者在一起也没有问题。
  • GRANULARITY 表示在特定区域内多少个结果值合并成一个点来输出。该变量的取值应该和PrepareKey 方法返回的列表大小正相交。即列表长,取值就应该大;列表短,取值就应该小一点。

如何确定分布式节点的 key

很简单!

  1. 在确定了一致性 hash 算法后,用 hash.py 实现你的 hash 算法。(对于 C 开发的程序,可以直接调用 c模块;其他语言的程序可以尝试将你的算法包装成 http等服务,在 hash.py 指定的两个方法中调用即可)
  2. 指定 PrepareKey 只包含你准备尝试的 key. 同时将 GRANULARITY 设置为 1。

Enjoy it! :)

About

ShowHash 用于测试和展示 hash 算法在值区间里是否分布比较均衡。同时可以显示一个指定的 KEY 在经过 hash 后被散列到了值区间的相对位置

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages