Categorygithub.com/go-faster/city
modulepackage
1.0.1
Repository: https://github.com/go-faster/city.git
Documentation: pkg.go.dev

# README

city stable

CityHash in Go. Fork of tenfyzhong/cityhash.

Note: prefer xxhash as non-cryptographic hash algorithm, this package is intended for places where CityHash is already used.

CityHash is not compatible to FarmHash, use go-farm.

go get github.com/go-faster/city
city.Hash128([]byte("hello"))
  • Faster
  • Supports ClickHouse hash
name            old time/op    new time/op    delta
CityHash64-32      333ns ± 2%     108ns ± 3%   -67.57%  (p=0.000 n=10+10)
CityHash128-32     347ns ± 2%     112ns ± 2%   -67.74%  (p=0.000 n=9+10)

name            old speed      new speed      delta
CityHash64-32   3.08GB/s ± 2%  9.49GB/s ± 3%  +208.40%  (p=0.000 n=10+10)
CityHash128-32  2.95GB/s ± 2%  9.14GB/s ± 2%  +209.98%  (p=0.000 n=9+10)

Benchmarks

goos: linux
goarch: amd64
pkg: github.com/go-faster/city
cpu: AMD Ryzen 9 5950X 16-Core Processor
BenchmarkClickHouse128/16     2213.98 MB/s
BenchmarkClickHouse128/64     4712.24 MB/s
BenchmarkClickHouse128/256    7561.58 MB/s
BenchmarkClickHouse128/1024  10158.98 MB/s
BenchmarkClickHouse64        10379.89 MB/s
BenchmarkCityHash32           3140.54 MB/s
BenchmarkCityHash64           9508.45 MB/s
BenchmarkCityHash128          9304.27 MB/s
BenchmarkCityHash64Small      2700.84 MB/s
BenchmarkCityHash128Small     1175.65 MB/s

# Functions

CH128 returns 128-bit ClickHouse CityHash.
CH128Seed returns 128-bit seeded ClickHouse CityHash.
CH64 returns ClickHouse version of Hash64.
Hash128 returns a 128-bit hash and are tuned for strings of at least a few hundred bytes.
Hash128Seed return a 128-bit hash with a seed.
Hash32 return 32-bit hash.
Hash64 return a 64-bit hash.
Hash64WithSeed return a 64-bit hash with a seed.
Hash64WithSeeds return a 64-bit hash with two seeds.

# Structs

U128 is uint128.