メインコンテンツまでスキップ
メインコンテンツまでスキップ

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の後継ですが、完全には互換性がありません。

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

また、Introducing CityHash の記事も参照してください。これは、作成の理由と説明を提供しています。TL;DR 非暗号化ハッシュで、MurmurHash よりも速く、しかしより複雑です。

実装

Go

両方のバリアントを実装した go-faster/city Goパッケージを使用できます。