跳到主要内容
跳到主要内容

CityHash

ClickHouse 使用的是 Google 的 CityHash一个较早版本

参考资料

在我们将 CityHash 引入 ClickHouse 之后,CityHash 更改了算法。

CityHash 的文档明确指出,用户不应依赖具体的哈希值,也不应将其保存到任何地方或用作分片键。

但由于我们将此函数暴露给用户使用,因此必须将 CityHash 的版本固定为 1.0.2。现在我们保证,SQL 中可用的 CityHash 函数的行为将不会改变。

— Alexey Milovidov

注意

当前 Google 的 CityHash 版本与 ClickHouse 的 cityHash64 变体不同

不要使用 farmHash64 来获取 Google CityHash 的值!FarmHash 是 CityHash 的后继者,但它们并不完全兼容。

字符串ClickHouse64CityHash64FarmHash64
Moscow1250790149629287863859927100784533574095992710078453357409
How can you write a big system without C++? -Paul Glick623794531165004562574929116295744250411716470977470720228

另请参阅 Introducing CityHash,了解其设计说明和创建动机。简而言之:这是一种非加密哈希,比 MurmurHash 更快,但实现更复杂。

实现

Go

可以使用 go-faster/city 这个 Go 包,该包实现了这两种变体。