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

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

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

また、Introducing CityHashを参照すると、作成の背景や説明について詳しい情報を得ることができます。TL;DR 非暗号化 ハッシュで、MurmurHash よりも速いですが、より複雑です。

実装

Go

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