db

package
v0.0.0-...-8095a56 Latest Latest
Warning

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

Go to latest
Published: Mar 24, 2025 License: Apache-2.0 Imports: 14 Imported by: 0

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.

package main

import (
    "github.com/depinnetwork/depin-sdk/log"

    "github.com/depinnetwork/iavl"
    dbm "github.com/depinnetwork/iavl/db"
)

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

    tree := iavl.NewMutableTree(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

func IteratePrefix(db corestore.KVStoreWithBatch, 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)

	// Set sets the key. Errors on nil key or value.
	Set(key, value []byte) error

	// Delete deletes the key. Errors on nil key.
	Delete(key []byte) 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 only used to create the mock. `corestore.KVStoreWithBatch` is used in the implementation.

type GoLevelDB

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

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

func NewGoLevelDBWithOpts

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

func (*GoLevelDB) Close

func (db *GoLevelDB) Close() error

Close implements corestore.KVStore.

func (*GoLevelDB) Delete

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

Delete implements corestore.KVStore.

func (*GoLevelDB) DeleteSync

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

DeleteSync implements corestore.KVStore.

func (*GoLevelDB) ForceCompact

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

func (*GoLevelDB) Get

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

Get implements corestore.KVStore.

func (*GoLevelDB) Has

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

Has implements corestore.KVStore.

func (*GoLevelDB) Iterator

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

Iterator implements KVStore.

func (*GoLevelDB) NewBatch

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

NewBatch implements corestore.BatchCreator.

func (*GoLevelDB) NewBatchWithSize

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

NewBatchWithSize implements corestore.BatchCreator.

func (*GoLevelDB) Print

func (db *GoLevelDB) Print() error

Print implements corestore.KVStore.

func (*GoLevelDB) RawDB

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

func (*GoLevelDB) ReverseIterator

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

ReverseIterator implements corestore.KVStore.

func (*GoLevelDB) Set

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

Set implements corestore.KVStore.

func (*GoLevelDB) SetSync

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

SetSync implements corestore.KVStore.

func (*GoLevelDB) Stats

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

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

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

func NewPrefixDB

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

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

func (*PrefixDB) Close

func (pdb *PrefixDB) Close() error

Close implements corestore.KVStore.

func (*PrefixDB) Delete

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

Delete implements corestore.KVStore.

func (*PrefixDB) Get

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

Get implements corestore.KVStore.

func (*PrefixDB) Has

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

Has implements corestore.KVStore.

func (*PrefixDB) Iterator

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

Iterator implements corestore.KVStore.

func (*PrefixDB) NewBatch

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

NewBatch implements corestore.BatchCreator.

func (*PrefixDB) NewBatchWithSize

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

NewBatchWithSize implements corestore.BatchCreator.

func (*PrefixDB) Print

func (pdb *PrefixDB) Print() error

Print implements corestore.KVStore.

func (*PrefixDB) ReverseIterator

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

ReverseIterator implements corestore.KVStore.

func (*PrefixDB) Set

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
⌂ 换网址