Archiving the dolthub/swiss GitHub Repository

GOLANG
2 min read

At DoltHub, we're building Dolt, the world's first SQL database that supports Git-like version control, including branch, merge, diff, clone, push and pull. Dolt is written in Go. Almost two years ago, my colleague Andy released an implementation of swiss tables, which was purpose built to be used for metadata tracking within Dolt's storage engine.

While Andy's implementation was not the first open source implementation of swiss tables in Go, it was one of the first ones that we know of that seemed to gain significant interest from the community.

dolthub/swiss star history

For the last two years, swiss has been chugging along deep in the guts of Dolt, serving as the basis for one of the metadata indexes that Dolt has to consult every time it fetches data from disk.

Over time, other implemetations came along. Some of these were more full featured and made different performance tradeoffs. About a year ago, CockroachDB published cockroachdb/swiss on GitHub, which was a more full-featured map implementation based on swiss tables. Most recently, and most significant of all, Go 1.24 shipped with swiss tables as the foundation of Go's map implementation. We thought it was very cool to see Andy called out in the Acknowledgements of the Go release blog.

Andy acknowledgements

dolthub/swiss was always a purpose built, pointy tool serving a particular niche in Dolt's storage engine. Dolt, for the most part, continued to use regular Go maps for the vast majority of its needs, and only used swiss for a few particularly large, essentially append-only, and highly latency sensitive maps. Dolt's use case and requirements ended up being somewhat at odds with growing the functionality dolthub/swiss and even with stewarding community contributions.

With the recent release of Go 1.24, we have had some users reach out to us to ask us about the future of dolthub/swiss. This week, I got a chance to upgrade our toolchains to Go 1.24 and to evaluate the performance impact of the new native map implementation on Dolt, compared to dolthub/swiss. What we found was that the performance of the new maps, for our use case, was even a bit faster than dolthub/swiss. Additionally, their growth strategy was very attractive from a tail latency standpoint.

As a result of these findings, we decided to remove the remaining use of dolthub/swiss from Dolt. As a result of no longer having a production use case for dolthub/swiss itself, and our belief that there are other compelling alternatives available in the community, we are also choosing to archive the dolthub/swiss GitHub repository. We believe that this best signals our intentions for our future involvement with the repository and is the best way to minimize any potential confusion going forward.

It feels great that we were able to deliver and rely on a quality swiss table implementation that served our needs well for two years. It also feels great to remove dependencies, to delete unnecessary code, and to migrate to standard components which will require almost no engineering investment to reap the benefits of going forward. The fact remains—there's no code like no code.

The entire story of dolthub/swiss represents a big win for us and for the Go community at large. We continue to be impressed with the community and the Go team and we are very happy with our continued investment in Go and its ecosystem as a foundational part of our tech stack.

If you want to talk swiss tables, Go release versions, or superceded depenendencies, drop by and reach out on our Discord server. We hope to see you there!

SHARE

JOIN THE DATA EVOLUTION

Get started with Dolt

Or join our mailing list to get product updates.