MurmurHash 哈希算法
MurmurHash:(multiply and rotate) and (multiply and rotate) Hash,乘法和旋转的hash 算法。
三、MurmurHash使用
1.导包
Java版:google guava 包中提供了使用工具类:
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>30.1.1-jre</version>
2.使用
import java.nio.charset.StandardCharsets;
import com.google.common.hash.HashFunction;
import com.google.common.hash.Hashing;
public class MurmurHashTest {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
String hexHashString = getHexHashString("qwerqwerqwer");
System.out.println(hexHashString);
}
}
public static String getHexHashString(String str) {
HashFunction hashFunction = Hashing.murmur3_128();
return hashFunction.hashString(str, StandardCharsets.UTF_8).toString();
}
}
代码例子:
<dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>20.0</version> </dependency>
public class TestMurmurhash3 { public static void main(String[] args) { String myStr = "ehl-test111"; String str = Hashing.murmur3_128().newHasher().putString(myStr, StandardCharsets.UTF_8).hash().toString(); System.out.println("str is:::::"+ str); HashFunction function = Hashing.murmur3_32(); HashCode hascode = function.hashString("hello1", Charset.forName("utf-8")); System.out.println(hascode.asInt()); HashCode hascode2 = function.hashString("hello2", Charset.forName("utf-8")); System.out.println(hascode2.asInt()); HashCode hascode3 = function.hashString("hello3", Charset.forName("utf-8")); System.out.println(hascode3.asInt()); byte[] mm3_le = Hashing.murmur3_128().hashString("abc", Charset.forName("utf-8")).asBytes(); System.out.println(Hashing.murmur3_128().hashString("abc", Charset.forName("utf-8")).asInt()); byte[] mm3_be = Bytes.toArray(Lists.reverse(Bytes.asList(mm3_le))); System.out.println(new BigInteger(mm3_be).toString()); System.out.println(Hashing.murmur3_128().newHasher().putString("abc", StandardCharsets.UTF_8).hash().toString()); System.out.println(Hashing.murmur3_128().newHasher().putString("abc", StandardCharsets.UTF_8).hash().asInt()); assertEquals("79267961763742113019008347020647561319",new BigInteger(mm3_be).toString()); HashFunction hashFunction = Hashing.murmur3_128(); String s2 = hashFunction.hashString(myStr, StandardCharsets.UTF_8).toString(); System.out.println(s2); } public static String getHexHashString(String str) { HashFunction hashFunction = Hashing.murmur3_128(); return hashFunction.hashString(str, StandardCharsets.UTF_8).toString(); } public static String getHexMD5String(String str) { // return org.springframework.util.DigestUtils.md5DigestAsHex(str.getBytes()); return DigestUtils.md5Hex(str.getBytes()); } }
package com.xxx.utils.hash; import com.google.common.hash.HashFunction; import com.google.common.hash.Hashing; import org.apache.hadoop.hive.ql.exec.UDF; import java.nio.charset.StandardCharsets; /** * TODO * * @author User * @version 1.0 * @date 2022/4/12 15:38 */ public class MyHiveUdf extends UDF { // 重载evaluate方法 // 进入hive客户端,添加jar包:hive> add jar /run/jar/udf_test.jar // 创建临时函数:hive> CREATE TEMPORARY FUNCTION murmurhash3 AS 'com.ehl.utils.hash.MyHiveUdf'; // hive> SELECT murmurhash3("gaozz") FROM scores; // hive> DROP TEMPORARY FUNCTION murmurhash3; // murmurhash3(concat("uid-",uid)) as uidHash, // murmurhash3(concat("cre-",credit_id)) as creditCardIdHash public String evaluate(String inputStr){ String str = Hashing.murmur3_128().newHasher().putString(inputStr, StandardCharsets.UTF_8).hash().toString(); // HashFunction hashFunction = Hashing.murmur3_128(); // String str = hashFunction.hashString(str, StandardCharsets.UTF_8).toString(); return str; } }
// murmurhash3(concat("uid-",uid)) as uidHash, // murmurhash3(concat("cre-",credit_id)) as creditCardIdHash
相关推荐
** MurMurHash3 算法概述 ** MurMurHash3 是一种非加密哈希函数,由 Austin Appleby 开发,被广泛应用于数据结构和分布式系统中,如 Hadoop、Redis 和其他数据库系统。它的主要特点是计算速度快且哈希冲突的概率...
这是 Murmur3 哈希函数的 C 语言移植版本,Murmur3 是一个非加密的哈希算法,主要设计目的是快速和高质量,原有代码是 C 的,先移植到 C 并兼容标准 C 和 gcc 编译器。 标签:murmur3
4. **跨平台兼容**:由于murmurhash3js-revisited库在Node.js和浏览器环境下都能运行,开发者可以在前后端统一使用相同的哈希算法,简化了代码维护和移植。 5. **源码可读性**:开源库的代码通常具有良好的注释和...
《MurmurHash:高性能、低碰撞的哈希算法解析》 MurmurHash是一种广泛应用于数据处理和存储系统的非加密哈希函数,由Austin Appleby在2008年设计。它的主要特点在于提供了出色的运算性能和极低的哈希碰撞率,这使得...
4. **浏览器与服务器兼容性**:JavaScript实现的MurmurHash3可以在浏览器和服务器环境中运行,意味着它可以应用于Web应用的客户端和服务器端,如Node.js服务端开发。 5. **JavaScript语法**:理解这个项目的代码...
var murmurHash3 = require('murmur-hash').v3; 例子 // Return a 32bit hash as a unsigned int: > murmurHash3.x86.hash32("I will not buy this record, it is scratched.") 2832214938 // Return a 128bit ...
由Gary Court创建的MurmurHash3 JavaScript版本的移植( ) 安装 使用: composer require lastguest/murmurhash 用法 您可以通过Murmur类的hash3静态方法检索哈希 <?php use lastguest\ Murmur ; echo Murmur :...
`murmurhash2-0.2.0` 这个版本可能提供了Python绑定,使得用户可以方便地在Python代码中调用C语言实现的MurmurHash2算法,从而获得更好的性能。 **安装与使用** 这个`.whl`文件是一种Python的轮子文件,它是预编译...
例如,使用`murmurhash3_32` 函数,可以对字符串、字节对象等进行哈希运算。 ```python import murmurhash data = "Hello, World!" hash_value = murmurhash.murmurhash3_32(data) print("哈希值:", hash_value) `...
Austin Appleby的第三个MurmurHash修订版(aka MurmurHash3)的Native Go实现。 引用算法已被略微修改,以支持Go的标准所需的流模式。 基准测试 截至2014年6月12日(即接近go1.3),i7核心@ 3.4 GHz时的提示。 ...
节点杂音 注意:这是,可移植到commonJS模块,该模块可以轻松地包含在node.js项目或浏览器中。 我不相信实施。 我只是让其他人更容易使用。 MurmurHash算法的优化... 同时支持MurmurHash算法的版本2和版本3: /
哈希算法能够将任意长度的输入(也叫做预映射或消息)转化为固定长度的输出,这个输出通常是一个二进制数字,称为哈希值。在本篇文章中,我们将深入探讨7种常见的哈希算法,以及如何使用C语言实现它们。 1. **MD5...
它是由Austin Appleby开发的一种哈希算法,以其快速、高效的特性而著名。MurmurHash2的主要优点在于它能够避免常见的哈希冲突,并且对于不同的输入大小,其计算速度保持相对一致。这种算法对输入数据进行多次混合...
基于其他MurmurHash3 32位和128位渐进实现 流封装器,用于带有渐进式哈希器。类似于bi-api接口 渐进式哈希器的可序列化状态 哈希的BE或LE字节顺序变体 承诺包装 适用于大多数标准系统配置的预构建二进制文件 ...
Python3-mmhash是一个开源项目,它是MurmurHash2算法的Python3实现。MurmurHash2是一个非加密哈希函数,由Austin Appleby在2008年设计,广泛用于数据索引、数据去重和快速查找等场景。它的特点是速度快、散列冲突的...
MurmurHash算法以其低冲突率和高性能而闻名,尤其适合用于需要高性能哈希计算的场景,如数据库索引、数据去重、键的生成等。 描述中的"资源来自pypi官网,解压后可用。资源全名:murmurhash-0.26.4-cp35-cp35m-...
.NET的哈希的实现 在撰写本文时,该库支持3种主要Murmur3变体:32位哈希(x86),128位...HashAlgorithm murmur128 = MurmurHash.Create128(managed: false); // returns a 128-bit algorithm using "unsafe" code with
在上面的示例中,我们定义了一个名为"sharding-by-murmur"的分片规则,使用 murmur 算法对数据进行哈希分片。该规则将根据数据的id列进行哈希映射,并将其分配到两个数据库节点中(count=2)。 在Mycat的一致性哈希...
MurmurHash的最新版本是MurmurHash3,它在性能和散列质量上都有显著提升。 这个压缩包"murmurhash-master"包含了MurmurHash的源代码,是为.NET环境提供的实现。这意味着开发者可以在.NET平台上方便地使用MurmurHash...
然而,哈希算法存在冲突的问题,即使MurmurHash的冲突概率较低,仍有可能出现两个不同的长网址映射到相同的短网址。为了解决这个问题,我们需要存储短网址和原始网址之间的映射关系。这可以通过自定义的存储系统或...