CityHash
ClickHouseは 以前の GoogleのCityHash のバージョンの1つを使用しています。
参考
CityHashはClickHouseに追加した後、アルゴリズムが変更されました。
CityHashのドキュメントでは、ユーザーは特定のハッシュ値に依存せず、それをどこにも保存したりシャーディングキーとして使用したりしないべきと明記されています。
しかし、この関数をユーザーに公開したため、CityHashのバージョンを固定する必要がありました(1.0.2に)。現在、SQLで利用可能なCityHash関数の動作が変更されないことを保証します。
— Alexey Milovidov
注
Googleの現在のCityHashのバージョンは、ClickHouseのcityHash64
バリアントとは 異なります。
GoogleのCityHash値を取得するためにfarmHash64
を使用しないでください!FarmHashはCityHashの後継ですが、完全には互換性がありません。
文字列 | ClickHouse64 | CityHash64 | FarmHash64 |
---|---|---|---|
Moscow | 12507901496292878638 | 5992710078453357409 | 5992710078453357409 |
How can you write a big system without C++? -Paul Glick | 6237945311650045625 | 749291162957442504 | 11716470977470720228 |
また、Introducing CityHashを参照すると、作成の背景や説明について詳しい情報を得ることができます。TL;DR 非暗号化 ハッシュで、MurmurHash よりも速いですが、より複雑です。
実装
Go
両方のバリアントを実装した go-faster/city Goパッケージを使用できます。