javascript - nodejs 一致性哈希库

标签 javascript algorithm hash node.js

根据STFW的资料,猜测CRC32、KETAMA几乎是目前最好的一致性哈希算法,但我没有找到任何库实现它们。

最佳答案

我编写了一个 JavaScript CRC32 实现来散列字符串:

var crc32 = (function() {
    function utf8encode(str) {
        var utf8CharCodes = [];

        for (var i = 0, len = str.length, c; i < len; ++i) {
            c = str.charCodeAt(i);
            if (c < 128) {
                utf8CharCodes.push(c);
            } else if (c < 2048) {
                utf8CharCodes.push((c >> 6) | 192, (c & 63) | 128);
            } else {
                utf8CharCodes.push((c >> 12) | 224, ((c >> 6) & 63) | 128, (c & 63) | 128);
            }
        }
        return utf8CharCodes;
    }

    var cachedCrcTable = null;

    function buildCRCTable() {
        var table = [];
        for (var i = 0, j, crc; i < 256; ++i) {
            crc = i;
            j = 8;
            while (j--) {
                if ((crc & 1) == 1) {
                    crc = (crc >>> 1) ^ 0xEDB88320;
                } else {
                    crc >>>= 1;
                }
            }
            table[i] = crc >>> 0;
        }
        return table;
    }

    function getCrcTable() {
        if (!cachedCrcTable) {
            cachedCrcTable = buildCRCTable();
        }
        return cachedCrcTable;
    }

    return function(str) {
        var utf8CharCodes = utf8encode(str), crc = -1, crcTable = getCrcTable();
        for (var i = 0, len = utf8CharCodes.length, y; i < len; ++i) {
            y = (crc ^ utf8CharCodes[i]) & 0xFF;
            crc = (crc >>> 8) ^ crcTable[y];
        }
        return (crc ^ -1) >>> 0;
    };
})();

alert(crc32("A test string").toString(16));

关于javascript - nodejs 一致性哈希库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4483952/

相关文章:

javascript - 如何在 Photoshop 中通过 JavaScript 选择、复制和粘贴矢量蒙版

java - 查找流交集是否为非空

java - 使用动态规划找到子集和的解决方案

java - 递归以获取数组中的所有变体总和

javascript - 链接和 JS 重定向,导致在 Office JS 加载项中打开一个新窗口

javascript - Angular 如何知道 $httpBackend 正在替换 Angularjs 测试中的 $http ?

git - git中的树哈希存储在哪里?

Python 比较两个十六进制值

javascript - 使用JS动态添加下拉列表表

python - 对哈希的质疑