Google发布CityHash系列散列算法

Google发布了 CityHash系列字符串散列算法。今天发布的有两种算法:CityHash64 与 CityHash128。它们分别根据字串计算64和128位的散列值。这些算法不适用于加密,但适合用在散列表等处。

Google一直在根据其数据中心常用的CPU对算法进行优化,结果发现对大多数个人计算机与笔记本同样有效益。尤其是在64位寄存器、指令集级的并行,以及快速非对其内存存取方面。

该算法的开发受到了前人在散列算法方面的巨大启发,尤其是Austin Appleby的MurmurHash。但CityHash的主要优点是大部分步骤包含了至少两步独立的数学运算。现代CPU通常能从这种代码获得最佳性能。

但CityHash也有其缺点:代码较同类流行算法复杂。Google希望为速度而不是为了简单而优化,因此没有照顾较短输入的特例。

总体而言,CityHash64与CityHash128是解决经典问题的全新算法。在实际应用中,Google预计CityHash64在速度方面至少能提高 30%,并有望提高多达两倍。此外,这些算法的统计特性也很完备。

文章转自:谷奥——探寻谷歌的奥秘http://www.guao.hk

时间: 2024-09-20 00:26:49

Google发布CityHash系列散列算法的相关文章

Android数据加密之SHA安全散列算法_Android

前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好奇心,所以趁着晚上没啥事,来学习一下. 其他几种加密方式:  •Android数据加密之Rsa加密  •Android数据加密之Aes加密  •Android数据加密之Des加密  •Android数据加密之MD5加密  •Android数据加密之Base64编码算法 SHA加密算法      SH

Android数据加密之SHA安全散列算法

前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好奇心,所以趁着晚上没啥事,来学习一下. 其他几种加密方式: •Android数据加密之Rsa加密  •Android数据加密之Aes加密  •Android数据加密之Des加密  •Android数据加密之MD5加密  •Android数据加密之Base64编码算法 SHA加密算法 SHA(Secu

求C# SHA-256的HMAC散列算法

问题描述 求C#SHA-256的HMAC散列算法,贴代码!!!! 解决方案 解决方案二:byte[]key=...;byte[]content=...;using(HMAChmac=newHMACSHA256(key)){byte[]hash=hmac.ComputeHash(content);}

《解读NoSQL》——2.4 使用一致性散列算法维护当前的缓存

2.4 使用一致性散列算法维护当前的缓存 我们已经知道了将经常使用的数据保存在RAM缓存中的重要性,以及如何通过减少非必要的磁盘访问来提升数据库性能.NoSQL系统将基于这个概念进行深入探讨,并采用了一致性散列(consistent hashing)的算法使访问最频繁的数据保存在缓存中. 在评估NoSQL系统如何工作时,一致性散列算法是一种有效的通用流程.一致性散列算法能很快判断出一个新的查询或者文档是否和缓存中的某一个对象是相同的.了解这些将有助于减少不必要的磁盘访问并且使数据库保持高速运行的

.Net加密与解密——散列运算

  一,散列运算的特点             1,散列运算是不可逆的,可以将散列运算理解为单向的加密: 2,任何两个不相同的文件,哪怕只有一个字节的细微差别,得到的摘要都是完全不同的.这个特点的意义在于,可以用来判断消息是否被篡改,即解决完整性的问题. 3,无论原始消息的大小如何,运算得出的摘要的信息是固定长度,摘要的长度根据散列算法的不同而不同. 二,利用散列运算判断消息是否被篡改的流程  1,发送放对消息进行散列运算,得到消息摘要,发送消息和摘要,并说明获得摘要所使用的散列算法. 2,接收

java加密算法--MD5加密和哈希散列带秘钥加密算法源码_java

java加密算法--MD5加密和哈希散列带秘钥加密算法源码              最近学习加密算法的知识,利用MD5 加密,百度一下网上资料很多,不是很详细,这里就整理下如何实现用MD5加密和 哈希散列带秘钥加密算法,大家可以看下. 实现代码: package com.ompa.common.utils; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java

数据结构算法-散列平方探测法的疑惑

问题描述 散列平方探测法的疑惑 求教各位,在问题中给出的是字符串时,我们用散列获得它的内部编号,那拉链法肯定不行了,能用开放定址法.那么问题来了,如果检测的时候输入的字符串是错误的(不是开始给出的之一,这就是在散列中不存在),我选择平方探测法的话如何发现这种错误呢?或者有什么方法可以检测这种错误呢?如果发现不了,那么对错误的输入,这种方法不是毫无办法了吗? 解决方案 http://www.mamicode.com/info-detail-528275.html

PHP大量Session的散列及过期回收

一台服务器流量比较大,因为程序的需要,session的过期时间设置的是3小时,导致/tmp下堆积了近20万的session文件.进而导致内核占用的cpu急剧上升.因为session的读写涉及到大量小文件的随机读写,并且是集中在一个目录下,iowait也急剧升高. 首先考虑将session放入内存中 最简单的办法莫过于将/tmp挂载为 tmpfs文件系统,也就是内存中 第二步,将session存储到不通的目录中 php本身支持session的多级散列 在php.ini中,将 ;session.sa

数据库表分割技术浅析(水平分割/垂直分割/库表散列)_oracle

一.水平分割 什么是水平分割?打个比较形象的比喻,在食堂吃饭的时候,只有一个窗口,排队打饭的队伍太长了,都排成S型了,这时容易让排队的人产生焦虑情绪,容易产生混乱,这时一个管理者站出来,增加多个打饭窗口,把那条长长的队伍拦腰截断成几队.更形象一点的理解,你拿一把"手术刀",把一个大表猛的切了几刀,结果这个大表,变成了几个小表. 水平分割根据某些条件将数据放到两个或多个独立的表中.即按记录进分分割,不同的记录可以分开保存,每个子表的列数相同.水平切割将表分为多个表.每个表包含的列数相同,