メインコンテンツへスキップ
メインコンテンツへスキップ

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

StringClickHouse64CityHash64FarmHash64
Moscow1250790149629287863859927100784533574095992710078453357409
How can you write a big system without C++? -Paul Glick623794531165004562574929116295744250411716470977470720228

また、CityHash の説明と作成の背景については Introducing CityHash も参照してください。要するに、暗号用途を想定していないハッシュであり、MurmurHash より高速ですが、より複雑です。

実装

Go

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