跳至主要内容

CityHash

ClickHouse 使用 **之前版本之一** 的 来自 Google 的 CityHash

信息

在我们将其添加到 ClickHouse 后,CityHash 更改了算法。

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

但由于我们将此函数暴露给用户,我们不得不修复 CityHash 的版本(至 1.0.2)。现在,我们保证 SQL 中可用的 CityHash 函数的行为不会改变。

— Alexey Milovidov

注意

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

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

字符串ClickHouse64CityHash64FarmHash64
莫斯科1250790149629287863859927100784533574095992710078453357409
如何在没有 C++ 的情况下编写大型系统?-Paul Glick623794531165004562574929116295744250411716470977470720228

另请参阅 Introducing CityHash 以了解创建背后的描述和原因。 TL;DR **非加密** 哈希,速度快于 MurmurHash,但更复杂。

实现

Go

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