CityHash
ClickHouseは、以前のバージョンの CityHash from Google を使用しています。
参考
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パッケージを使用できます。