Skip to content

Latest commit

 

History

History
138 lines (108 loc) · 5.77 KB

File metadata and controls

138 lines (108 loc) · 5.77 KB

Go Lint Release GoDoc License Coverage Status

Apache® DataSketches™ Core Go Library Component

This is the core Go component of the DataSketches library. It contains some of the sketching algorithms and can be accessed directly from user applications.

This project is currently under development. Breaking changes may occur before a stable release.

Note that we have parallel core library components for C++, Java, Python, and Rust implementations of many of the same sketch algorithms:

Please visit the main DataSketches website for more information.

If you are interested in making contributions to this site, please see our Community page for information on how to contact us.

Major Sketches

Type Implementation Status
Cardinality
CpcSketch ✅
HllSketch ✅
ThetaSketch ✅
TupleSketch ✅
Quantiles
CormodeDoublesSketch ❌
CormodeItemsSketch ❌
KllDoublesSketch ✅
KllFloatsSketch ✅
KllSketch ✅
ReqFloatsSketch ⚠️
TDigestDouble ✅
TDigestFloat ❌
Frequencies ️
FreqLongsSketch ✅
FreqItemsSketch ✅
CountMinSketch ✅
Sampling
ReservoirLongsSketch ✅
ReserviorItemsSketch ✅
VarOptItemsSketch ✅
EbppsSketch ❌
Membership
BloomFilter ✅
Density
DensitySketch ❌

Specialty Sketches

Type Interface Name Status
Cardinality/FM85 UniqueCountMap ❌
Cardinality/Tuple
FdtSketch ❌
ArrayOfDoublesSketch ✅
DoubleSketch ✅
IntegerSketch ✅
ArrayOfStringsSketch ✅
EngagementTest3 ❌

✅ = Released in v0.2.0

❌ = Not yet implemented

⚠️ = Implemented but not officially released

🚧 = In progress

Build & Runtime Dependencies

This code requires Go 1.24

Compilation and Test

Test can be run using go test command

go test ./...

A Dockerfile is also provided with the necessary env to build and test the project.

./build/Dockerfile
./build/run-docker-test.sh

Linting

Lint runs in CI via the Lint workflow, which uses golangci-lint v2.13.2 with the configuration in .golangci.yml.

Install that same version locally. The upstream project recommends the binary install and discourages go install and tool directives, because a source build compiles against your local Go version and can report different findings than CI:

curl -sSfL https://golangci-lint.run/install.sh | sh -s -- -b $(go env GOPATH)/bin v2.13.2

Prebuilt binaries are also available on the releases page, and package managers such as Homebrew work as well. Pin v2.13.2 either way, so local results match CI.

Then:

make lint     # report findings
make format   # gofmt, goimports, and golangci-lint --fix