Categorygithub.com/cosmos/cosmos-db
modulepackage
1.0.2
Repository: https://github.com/cosmos/cosmos-db.git
Documentation: pkg.go.dev

# README

Cosmos DB

version license API Reference codecov Lint Test Discord chat

Common database interface for various database backends. Primarily meant for applications built on Tendermint, such as the Cosmos SDK, but can be used independently of these as well.

Minimum Go Version

Go 1.19+

Supported Database Backends

  • MemDB [stable]: An in-memory database using Google's B-tree package. Has very high performance both for reads, writes, and range scans, but is not durable and will lose all data on process exit. Does not support transactions. Suitable for e.g. caches, working sets, and tests. Used for IAVL working sets when the pruning strategy allows it.

  • GoLevelDB: a pure Go implementation of LevelDB (see below). Currently the default on-disk database used in the Cosmos SDK.

  • LevelDB using levigo Go wrapper. Uses LSM-trees for on-disk storage, which have good performance for write-heavy workloads, particularly on spinning disks, but requires periodic compaction to maintain decent read performance and reclaim disk space. Does not support transactions.

  • RocksDB: A Go wrapper around RocksDB. Similarly to LevelDB (above) it uses LSM-trees for on-disk storage, but is optimized for fast storage media such as SSDs and memory. Supports atomic transactions, but not full ACID transactions.

  • Pebble: a RocksDB/LevelDB inspired key-value database in Go using RocksDB file format and LSM-trees for on-disk storage. Supports snapshots.

Meta-databases

  • PrefixDB [stable]: A database which wraps another database and uses a static prefix for all keys. This allows multiple logical databases to be stored in a common underlying databases by using different namespaces. Used by the Cosmos SDK to give different modules their own namespaced database in a single application database.

Tests

To test common databases, run make test. If all databases are available on the local machine, use make test-all to test them all.

# Functions

No description provided by the author
See DB interface documentation for more information.
IteratePrefix is a convenience function for iterating over a key domain restricted by prefix.
NewDB creates a new database of type backend with the given name.
No description provided by the author
No description provided by the author
No description provided by the author
NewMemDB creates a new in-memory database.
NewPrefixDB lets you namespace multiple DBs within a single DB.

# Constants

No description provided by the author
GoLevelDBBackend represents goleveldb (github.com/syndtr/goleveldb - most popular implementation) - pure go - stable.
MemDBBackend represents in-memory key value store, which is mostly used for testing.
PebbleDBDBBackend represents pebble (uses github.com/cockroachdb/pebble) - pure go - use pebble build tag (go build -tags pebbledb).
RocksDBBackend represents rocksdb (uses github.com/linxGnu/grocksdb) - requires gcc - use rocksdb build tag (go build -tags rocksdb).

# Structs

No description provided by the author
MemDB is an in-memory database backend using a B-tree for storage.
PrefixDB wraps a namespace of another database as a logical database.

# Interfaces

Batch represents a group of writes.
DB is the main interface for all database backends.
Iterator represents an iterator over a domain of keys.
No description provided by the author

# Type aliases

No description provided by the author
OptionsMap is a stub implementing Options which can get data from a map.