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