An embeddable, in-memory key/value database for Go with custom indexing and geospatial support.
BuntDB is a low-level, in-memory key/value store written in pure Go. It persists data to disk, is ACID compliant, and uses locking for multiple readers and a single writer. It is designed for projects that prioritize speed and dependability over large data size, offering features like custom indexing, geospatial support, and JSON field indexing.
Go developers building applications that require a fast, embedded, and reliable database with advanced querying capabilities, such as those needing spatial data handling, custom indexes, or ACID transactions without the overhead of a full SQL database.
Developers choose BuntDB for its combination of in-memory speed with disk persistence, ACID compliance, and unique features like geospatial indexing and JSON field indexing in a simple, embeddable package. Its custom indexing and multi-value index support provide flexibility similar to SQL databases while maintaining the performance of a key/value store.
BuntDB is an embeddable, in-memory key/value database for Go with custom indexing and geospatial support
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
In-memory storage enables microsecond-level reads and writes, with benchmarks showing over 4.6 million GET operations per second in custom tests.
Supports custom indexes on JSON fields using GJSON, multi-value indexes similar to SQL columns, and built-in types for easy setup, allowing complex data queries without a full SQL engine.
Built-in R-tree for spatial indexing up to 20 dimensions, with functions like Intersects and Nearby for efficient geospatial queries, ideal for location-based applications.
Locking transactions ensure data integrity with rollback support, separating read-only and read/write modes for safe concurrency in embedded environments.
Cannot delete keys during iteration; the README admits this requires a workaround of storing keys in a slice and deleting afterward, adding complexity for bulk operations.
Uses a proprietary bracket syntax for spatial data instead of standard formats like GeoJSON, necessitating learning and potential conversion overhead for interoperability.
Only one write transaction can be active at a time due to locking, which can limit throughput in write-heavy applications despite supporting multiple readers.