db

package
v1.3.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 27, 2024 License: Apache-2.0 Imports: 14 Imported by: 11

README

DB

The db package contains the key-value database interface and memdb implementation. The memdb is a simple in-memory key-value store that is used for testing and development purposes.

Context

The main purpose of the db package is to provide decoupling between cosmos-db and iavl packages. It provides a simple wrapper for the old users of iavl and cosmos-db to use the new db package without changing their code. For example:

package main

import (
    "cosmossdk.io/log"
    dbm "github.com/cosmos/cosmos-db"

    "github.com/cosmos/iavl"
    idbm "github.com/cosmos/iavl/db"
)

func main() {
    levelDB, err := dbm.NewDB("application", dbm.GoLevelDBBackend, "test")
 if err != nil {
  panic(err)
 }

 tree := iavl.NewMutableTree(idbm.NewWrapper(dbm.NewPrefixDB(levelDB, []byte("s/k:main/"))), 0, false, NewNopLogger())
}

Documentation

Index

Constants

View Source
const DBFileSuffix string = ".db"

Variables

This section is empty.

Functions

func IteratePrefix added in v1.3.0

func IteratePrefix(db DB, prefix []byte) (corestore.Iterator, error)

IteratePrefix is a convenience function for iterating over a key domain restricted by prefix.

Types

type DB

type DB interface {
	// Get fetches the value of the given key, or nil if it does not exist.
	// CONTRACT: key, value readonly []byte
	Get([]byte) ([]byte, error)

	// Has checks if a key exists.
	// CONTRACT: key, value readonly []byte
	Has(key []byte) (bool, error)

	// Iterator returns an iterator over a domain of keys, in ascending order. The caller must call
	// Close when done. End is exclusive, and start must be less than end. A nil start iterates
	// from the first key, and a nil end iterates to the last key (inclusive). Empty keys are not
	// valid.
	// CONTRACT: No writes may happen within a domain while an iterator exists over it.
	// CONTRACT: start, end readonly []byte
	Iterator(start, end []byte) (corestore.Iterator, error)

	// ReverseIterator returns an iterator over a domain of keys, in descending order. The caller
	// must call Close when done. End is exclusive, and start must be less than end. A nil end
	// iterates from the last key (inclusive), and a nil start iterates to the first key (inclusive).
	// Empty keys are not valid.
	// CONTRACT: No writes may happen within a domain while an iterator exists over it.
	// CONTRACT: start, end readonly []byte
	ReverseIterator(start, end []byte) (corestore.Iterator, error)

	// Close closes the database connection.
	Close() error

	// NewBatch creates a batch for atomic updates. The caller must call Batch.Close.
	NewBatch() corestore.Batch

	// NewBatchWithSize create a new batch for atomic updates, but with pre-allocated size.
	// This will does the same thing as NewBatch if the batch implementation doesn't support pre-allocation.
	NewBatchWithSize(int) corestore.Batch
}

DB is the main interface for all database backends. DBs are concurrency-safe. Callers must call Close on the database when done.

Keys cannot be nil or empty, while values cannot be nil. Keys and values should be considered read-only, both when returned and when given, and must be copied before they are modified.

type GoLevelDB added in v1.3.0

type GoLevelDB struct {
	// contains filtered or unexported fields
}

GoLevelDB implements corestore.KVStore using github.com/syndtr/goleveldb/leveldb. It is used for only store v2 migration, since some clients use goleveldb as the IAVL v0/v1 backend.

func NewGoLevelDB added in v1.3.0

func NewGoLevelDB(name, dir string) (*GoLevelDB, error)

func NewGoLevelDBWithOpts added in v1.3.0

func NewGoLevelDBWithOpts(name, dir string, o *opt.Options) (*GoLevelDB, error)

func (*GoLevelDB) Close added in v1.3.0

func (db *GoLevelDB) Close() error

Close implements corestore.KVStore.

func (*GoLevelDB) Delete added in v1.3.0

func (db *GoLevelDB) Delete(key []byte) error

Delete implements corestore.KVStore.

func (*GoLevelDB) DeleteSync added in v1.3.0

func (db *GoLevelDB) DeleteSync(key []byte) error

DeleteSync implements corestore.KVStore.

func (*GoLevelDB) ForceCompact added in v1.3.0

func (db *GoLevelDB) ForceCompact(start, limit []byte) error

func (*GoLevelDB) Get added in v1.3.0

func (db *GoLevelDB) Get(key []byte) ([]byte, error)

Get implements corestore.KVStore.

func (*GoLevelDB) Has added in v1.3.0

func (db *GoLevelDB) Has(key []byte) (bool, error)

Has implements corestore.KVStore.

func (*GoLevelDB) Iterator added in v1.3.0

func (db *GoLevelDB) Iterator(start, end []byte) (corestore.Iterator, error)

Iterator implements KVStore.

func (*GoLevelDB) NewBatch added in v1.3.0

func (db *GoLevelDB) NewBatch() corestore.Batch

NewBatch implements corestore.BatchCreator.

func (*GoLevelDB) NewBatchWithSize added in v1.3.0

func (db *GoLevelDB) NewBatchWithSize(size int) corestore.Batch

NewBatchWithSize implements corestore.BatchCreator.

func (*GoLevelDB) Print added in v1.3.0

func (db *GoLevelDB) Print() error

Print implements corestore.KVStore.

func (*GoLevelDB) RawDB added in v1.3.0

func (db *GoLevelDB) RawDB() *leveldb.DB

func (*GoLevelDB) ReverseIterator added in v1.3.0

func (db *GoLevelDB) ReverseIterator(start, end []byte) (corestore.Iterator, error)

ReverseIterator implements corestore.KVStore.

func (*GoLevelDB) Set added in v1.3.0

func (db *GoLevelDB) Set(key, value []byte) error

Set implements corestore.KVStore.

func (*GoLevelDB) SetSync added in v1.3.0

func (db *GoLevelDB) SetSync(key, value []byte) error

SetSync implements corestore.KVStore.

func (*GoLevelDB) Stats added in v1.3.0

func (db *GoLevelDB) Stats() map[string]string

Stats implements corestore.KVStore.

type MemDB

type MemDB struct {
	// contains filtered or unexported fields
}

MemDB is an in-memory database backend using a B-tree for the test purpose.

For performance reasons, all given and returned keys and values are pointers to the in-memory database, so modifying them will cause the stored values to be modified as well. All DB methods already specify that keys and values should be considered read-only, but this is especially important with MemDB.

func NewMemDB

func NewMemDB() *MemDB

NewMemDB creates a new in-memory database.

func (*MemDB) Close

func (db *MemDB) Close() error

Close implements DB.

func (*MemDB) Delete

func (db *MemDB) Delete(key []byte) error

Delete implements DB.

func (*MemDB) DeleteSync

func (db *MemDB) DeleteSync(key []byte) error

DeleteSync implements DB.

func (*MemDB) Get

func (db *MemDB) Get(key []byte) ([]byte, error)

Get implements DB.

func (*MemDB) Has

func (db *MemDB) Has(key []byte) (bool, error)

Has implements DB.

func (*MemDB) Iterator

func (db *MemDB) Iterator(start, end []byte) (corestore.Iterator, error)

Iterator implements DB. Takes out a read-lock on the database until the iterator is closed.

func (*MemDB) IteratorNoMtx

func (db *MemDB) IteratorNoMtx(start, end []byte) (corestore.Iterator, error)

IteratorNoMtx makes an iterator with no mutex.

func (*MemDB) NewBatch

func (db *MemDB) NewBatch() corestore.Batch

NewBatch implements DB.

func (*MemDB) NewBatchWithSize

func (db *MemDB) NewBatchWithSize(_ int) corestore.Batch

NewBatchWithSize implements DB. It does the same thing as NewBatch because we can't pre-allocate memDBBatch

func (*MemDB) Print

func (db *MemDB) Print() error

Print implements DB.

func (*MemDB) ReverseIterator

func (db *MemDB) ReverseIterator(start, end []byte) (corestore.Iterator, error)

ReverseIterator implements DB. Takes out a read-lock on the database until the iterator is closed.

func (*MemDB) ReverseIteratorNoMtx

func (db *MemDB) ReverseIteratorNoMtx(start, end []byte) (corestore.Iterator, error)

ReverseIteratorNoMtx makes an iterator with no mutex.

func (*MemDB) Set

func (db *MemDB) Set(key []byte, value []byte) error

Set implements DB.

func (*MemDB) SetSync

func (db *MemDB) SetSync(key []byte, value []byte) error

SetSync implements DB.

func (*MemDB) Stats

func (db *MemDB) Stats() map[string]string

Stats implements DB.

type PrefixDB added in v1.3.0

type PrefixDB struct {
	// contains filtered or unexported fields
}

PrefixDB wraps a namespace of another database as a logical database.

func NewPrefixDB added in v1.3.0

func NewPrefixDB(db corestore.KVStoreWithBatch, prefix []byte) *PrefixDB

NewPrefixDB lets you namespace multiple corestore.KVStores within a single corestore.KVStore.

func (*PrefixDB) Close added in v1.3.0

func (pdb *PrefixDB) Close() error

Close implements corestore.KVStore.

func (*PrefixDB) Delete added in v1.3.0

func (pdb *PrefixDB) Delete(key []byte) error

Delete implements corestore.KVStore.

func (*PrefixDB) Get added in v1.3.0

func (pdb *PrefixDB) Get(key []byte) ([]byte, error)

Get implements corestore.KVStore.

func (*PrefixDB) Has added in v1.3.0

func (pdb *PrefixDB) Has(key []byte) (bool, error)

Has implements corestore.KVStore.

func (*PrefixDB) Iterator added in v1.3.0

func (pdb *PrefixDB) Iterator(start, end []byte) (corestore.Iterator, error)

Iterator implements corestore.KVStore.

func (*PrefixDB) NewBatch added in v1.3.0

func (pdb *PrefixDB) NewBatch() corestore.Batch

NewBatch implements corestore.BatchCreator.

func (*PrefixDB) NewBatchWithSize added in v1.3.0

func (pdb *PrefixDB) NewBatchWithSize(size int) corestore.Batch

NewBatchWithSize implements corestore.BatchCreator.

func (*PrefixDB) Print added in v1.3.0

func (pdb *PrefixDB) Print() error

Print implements corestore.KVStore.

func (*PrefixDB) ReverseIterator added in v1.3.0

func (pdb *PrefixDB) ReverseIterator(start, end []byte) (corestore.Iterator, error)

ReverseIterator implements corestore.KVStore.

func (*PrefixDB) Set added in v1.3.0

func (pdb *PrefixDB) Set(key, value []byte) error

Set implements corestore.KVStore.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL
JackTT - Gopher 🇻🇳