【问题标题】:Hashing functions to make IP distributed for Hbase散列函数为 Hbase 分配 IP
【发布时间】:2015-11-25 03:48:41
【问题描述】:

我正在尝试找到一个哈希函数,它可以提供一些输出,这些输出的值很好地分布在某个值范围内。输入将是 IP 地址。

我们将 IP 地址作为 key 存储到 HBase 中,我的理解是在 hbase 中使用 rowkey 将每一行分配到不同的区域服务器。如果我们可以很好地分配 IP 地址,那么读/写性能应该会得到一定程度的提升。

【问题讨论】:

    标签: algorithm hash hbase distributed


    【解决方案1】:

    您必须同时注意 IPv4 和 IPv6。幸运的是,您可以将它们中的每一个都表示为一个整数 - 在 IPv4 中为 32 位,在 IPv6 中为 128 位。

    您可以在this question 中找到将 ip 地址转换为 long(或 Ipv6 的 long 数组)的代码示例。

    在将 IP 转换为数字后,对这些值进行均匀分布的函数相当简单。最简单的方法是除以某个数字(例如区域数)的余数。

    【讨论】:

      【解决方案2】:

      很久以前我就已经解决了这个问题。有趣的事实:简单的散列函数不能提供良好的伪随机分布。良好的分布只能通过非线性或加密哈希(如 MD5 或 SHA1)获得。 在我们的解决方案中,我们使用了自定义非线性哈希,如下所示:

      // Substitute-box: non-linear transform. 
      // Must be filled by random values prior to use
      uint32_t s_box[256]; 
      
      uint32_t ip_hash(const uint8_t *ip, uint8_t len) {
        uint32_t rc = 0x1f351f35;
        while(--len) {
          uint8_t x = *ip++;
          rc = ((rc << 7) | (rc >> (32-7))) + (s_box[x ^ (uint8_t)rc] ^ x);
        return rc ^ (rc >> 16); 
      }
      

      【讨论】:

        猜你喜欢
        • 2017-02-08
        • 1970-01-01
        • 1970-01-01
        • 2014-04-25
        • 2012-08-19
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多