VictoriaMetrics/vendor/github.com/cespare/xxhash/v2
Aliaksandr Valialkin 9e17b51d45
go.mod: update minimum Go version from Go 1.16 to Go 1.17
VictoriaMetrics code uses features from Go 1.17, so the minimum Go version must be increased from Go 1.16 to Go 1.17

See https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1987
2021-12-22 12:27:02 +02:00
..
LICENSE.txt all: open-sourcing single-node version 2019-05-23 00:18:06 +03:00
README.md vendor: make vendor-update 2021-08-25 13:41:02 +03:00
xxhash_amd64.go make vendor-update 2019-11-19 21:05:37 +02:00
xxhash_amd64.s vendor: make vendor-update 2021-08-25 13:41:02 +03:00
xxhash_other.go all: open-sourcing single-node version 2019-05-23 00:18:06 +03:00
xxhash_safe.go all: open-sourcing single-node version 2019-05-23 00:18:06 +03:00
xxhash_unsafe.go vendor: make vendor-update 2021-08-25 13:41:02 +03:00
xxhash.go vendor: make vendor-update 2021-08-25 13:41:02 +03:00

xxhash

Go Reference Test

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

This implementation provides a fast pure-Go implementation and an even faster assembly implementation for amd64.

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 later

I 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
5 B 979.66 MB/s 1291.17 MB/s
100 B 7475.26 MB/s 7973.40 MB/s
4 KB 17573.46 MB/s 17602.65 MB/s
10 MB 17131.46 MB/s 17142.16 MB/s

These numbers were generated on Ubuntu 18.04 with an Intel i7-8700K CPU using the following commands under Go 1.11.2:

$ go test -tags purego -benchtime 10s -bench '/xxhash,direct,bytes'
$ go test -benchtime 10s -bench '/xxhash,direct,bytes'

Projects using this package