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

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

文字列ClickHouse64CityHash64FarmHash64
Moscow1250790149629287863859927100784533574095992710078453357409
C++なしで大規模なシステムを書くことはどうできますか? -Paul Glick623794531165004562574929116295744250411716470977470720228

また、Introducing CityHash を参照して、その説明や作成の理由を確認してください。TL;DR 非暗号化 ハッシュで、MurmurHash よりも高速ですが、より複雑です。

実装

Go

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