Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/cespare/xxhash
A Go implementation of the 64-bit xxHash algorithm (XXH64)
https://github.com/cespare/xxhash
Last synced: 11 days ago
JSON representation
A Go implementation of the 64-bit xxHash algorithm (XXH64)
- Host: GitHub
- URL: https://github.com/cespare/xxhash
- Owner: cespare
- License: mit
- Created: 2016-08-27T22:08:31.000Z (about 8 years ago)
- Default Branch: main
- Last Pushed: 2024-07-03T18:24:03.000Z (4 months ago)
- Last Synced: 2024-10-18T15:18:52.037Z (21 days ago)
- Language: Go
- Homepage:
- Size: 95.7 KB
- Stars: 1,795
- Watchers: 30
- Forks: 123
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
- my-awesome - cespare/xxhash - 07 star:1.8k fork:0.1k A Go implementation of the 64-bit xxHash algorithm (XXH64) (Go)
- zero - xxhash - bit xxHash algorithm (XXH64) | Go | MIT | (Members)
- awesome-ccamel - cespare/xxhash - A Go implementation of the 64-bit xxHash algorithm (XXH64) (Go)
- go-awesome - xxhash - implementation of the xxHash hash algorithm (Open source library / Algorithm)
README
# xxhash
[![Go Reference](https://pkg.go.dev/badge/github.com/cespare/xxhash/v2.svg)](https://pkg.go.dev/github.com/cespare/xxhash/v2)
[![Test](https://github.com/cespare/xxhash/actions/workflows/test.yml/badge.svg)](https://github.com/cespare/xxhash/actions/workflows/test.yml)xxhash is a Go implementation of the 64-bit [xxHash] algorithm, XXH64. This is a
high-quality hashing algorithm that is much faster than anything in the Go
standard library.This package provides a straightforward API:
```
func Sum64(b []byte) uint64
func Sum64String(s string) uint64
type Digest struct{ ... }
func New() *Digest
```The `Digest` type implements hash.Hash64. Its key methods are:
```
func (*Digest) Write([]byte) (int, error)
func (*Digest) WriteString(string) (int, error)
func (*Digest) Sum64() uint64
```The package is written with optimized pure Go and also contains even faster
assembly implementations for amd64 and arm64. If desired, the `purego` build tag
opts into using the Go code even on those architectures.[xxHash]: https://xxhash.com/
## Compatibility
This package is in a module and the latest code is in version 2 of the module.
You need a version of Go with at least "minimal module compatibility" to use
github.com/cespare/xxhash/v2:* 1.9.7+ for Go 1.9
* 1.10.3+ for Go 1.10
* Go 1.11 or laterI recommend using the latest release of Go.
## Benchmarks
Here are some quick benchmarks comparing the pure-Go and assembly
implementations of Sum64.| input size | purego | asm |
| ---------- | --------- | --------- |
| 4 B | 1.3 GB/s | 1.2 GB/s |
| 16 B | 2.9 GB/s | 3.5 GB/s |
| 100 B | 6.9 GB/s | 8.1 GB/s |
| 4 KB | 11.7 GB/s | 16.7 GB/s |
| 10 MB | 12.0 GB/s | 17.3 GB/s |These numbers were generated on Ubuntu 20.04 with an Intel Xeon Platinum 8252C
CPU using the following commands under Go 1.19.2:```
benchstat <(go test -tags purego -benchtime 500ms -count 15 -bench 'Sum64$')
benchstat <(go test -benchtime 500ms -count 15 -bench 'Sum64$')
```## Projects using this package
- [InfluxDB](https://github.com/influxdata/influxdb)
- [Prometheus](https://github.com/prometheus/prometheus)
- [VictoriaMetrics](https://github.com/VictoriaMetrics/VictoriaMetrics)
- [FreeCache](https://github.com/coocood/freecache)
- [FastCache](https://github.com/VictoriaMetrics/fastcache)
- [Ristretto](https://github.com/dgraph-io/ristretto)
- [Badger](https://github.com/dgraph-io/badger)