db

package
v0.0.0-...-0a11024 Latest Latest
Warning

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

Go to latest
Published: Oct 12, 2020 License: Apache-2.0 Imports: 15 Imported by: 21

README

Tendermint DB

Data Base abstractions to be used in applications. These abstractions are not only meant to be used in applications built on Tendermint, but can be used in a variety of applications.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func FileExists

func FileExists(filePath string) bool

func IsKeyInDomain

func IsKeyInDomain(key, start, end []byte) bool

See DB interface documentation for more information.

Types

type BackendType

type BackendType string
const (
	// GoLevelDBBackend represents goleveldb (github.com/syndtr/goleveldb - most
	// popular implementation)
	//   - pure go
	//   - stable
	GoLevelDBBackend BackendType = "goleveldb"
	// CLevelDBBackend represents cleveldb (uses levigo wrapper)
	//   - fast
	//   - requires gcc
	//   - use cleveldb build tag (go build -tags cleveldb)
	CLevelDBBackend BackendType = "cleveldb"
	// MemDBBackend represents in-memoty key value store, which is mostly used
	// for testing.
	MemDBBackend BackendType = "memdb"
	// FSDBBackend represents filesystem database
	//	 - EXPERIMENTAL
	//   - slow
	FSDBBackend BackendType = "fsdb"
	// BoltDBBackend represents bolt (uses etcd's fork of bolt -
	// go.etcd.io/bbolt)
	//   - EXPERIMENTAL
	//   - may be faster is some use-cases (random reads - indexer)
	//   - use boltdb build tag (go build -tags boltdb)
	BoltDBBackend BackendType = "boltdb"
	// RocksDBBackend represents rocksdb (uses github.com/tecbot/gorocksdb)
	//   - EXPERIMENTAL
	//   - requires gcc
	//   - use rocksdb build tag (go build -tags rocksdb)
	RocksDBBackend BackendType = "rocksdb"
)

These are valid backend types.

type Batch

type Batch interface {
	SetDeleter
	Write()
	WriteSync()
	Close()
}

Batch Close must be called when the program no longer needs the object.

type DB

type DB interface {

	// Get returns nil iff key doesn't exist.
	// A nil key is interpreted as an empty byteslice.
	// CONTRACT: key, value readonly []byte
	Get([]byte) []byte

	// Has checks if a key exists.
	// A nil key is interpreted as an empty byteslice.
	// CONTRACT: key, value readonly []byte
	Has(key []byte) bool

	// Set sets the key.
	// A nil key is interpreted as an empty byteslice.
	// CONTRACT: key, value readonly []byte
	Set([]byte, []byte)
	SetSync([]byte, []byte)

	// Delete deletes the key.
	// A nil key is interpreted as an empty byteslice.
	// CONTRACT: key readonly []byte
	Delete([]byte)
	DeleteSync([]byte)

	// Iterate over a domain of keys in ascending order. End is exclusive.
	// Start must be less than end, or the Iterator is invalid.
	// A nil start is interpreted as an empty byteslice.
	// If end is nil, iterates up to the last item (inclusive).
	// CONTRACT: No writes may happen within a domain while an iterator exists over it.
	// CONTRACT: start, end readonly []byte
	Iterator(start, end []byte) Iterator

	// Iterate over a domain of keys in descending order. End is exclusive.
	// Start must be less than end, or the Iterator is invalid.
	// If start is nil, iterates up to the first/least item (inclusive).
	// If end is nil, iterates from the last/greatest item (inclusive).
	// CONTRACT: No writes may happen within a domain while an iterator exists over it.
	// CONTRACT: start, end readonly []byte
	ReverseIterator(start, end []byte) Iterator

	// Closes the connection.
	Close()

	// Creates a batch for atomic updates.
	NewBatch() Batch

	// For debugging
	Print()

	// Stats returns a map of property values for all keys and the size of the cache.
	Stats() map[string]string
}

DBs are goroutine safe.

func NewDB

func NewDB(name string, backend BackendType, dir string) DB

NewDB creates a new database of type backend with the given name. NOTE: function panics if:

  • backend is unknown (not registered)
  • creator function, provided during registration, returns error

type FSDB

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

It's slow.

func NewFSDB

func NewFSDB(dir string) *FSDB

func (*FSDB) Close

func (db *FSDB) Close()

func (*FSDB) Delete

func (db *FSDB) Delete(key []byte)

func (*FSDB) DeleteNoLock

func (db *FSDB) DeleteNoLock(key []byte)

NOTE: Implements atomicSetDeleter.

func (*FSDB) DeleteSync

func (db *FSDB) DeleteSync(key []byte)

func (*FSDB) Get

func (db *FSDB) Get(key []byte) []byte

func (*FSDB) Has

func (db *FSDB) Has(key []byte) bool

func (*FSDB) Iterator

func (db *FSDB) Iterator(start, end []byte) Iterator

func (*FSDB) MakeIterator

func (db *FSDB) MakeIterator(start, end []byte, isReversed bool) Iterator

func (*FSDB) Mutex

func (db *FSDB) Mutex() *sync.Mutex

func (*FSDB) NewBatch

func (db *FSDB) NewBatch() Batch

func (*FSDB) Print

func (db *FSDB) Print()

func (*FSDB) ReverseIterator

func (db *FSDB) ReverseIterator(start, end []byte) Iterator

func (*FSDB) Set

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

func (*FSDB) SetNoLock

func (db *FSDB) SetNoLock(key []byte, value []byte)

NOTE: Implements atomicSetDeleter.

func (*FSDB) SetSync

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

func (*FSDB) Stats

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

type GoLevelDB

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

func NewGoLevelDB

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

func NewGoLevelDBWithOpts

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

func (*GoLevelDB) Close

func (db *GoLevelDB) Close()

Implements DB.

func (*GoLevelDB) DB

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

func (*GoLevelDB) Delete

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

Implements DB.

func (*GoLevelDB) DeleteSync

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

Implements DB.

func (*GoLevelDB) Get

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

Implements DB.

func (*GoLevelDB) Has

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

Implements DB.

func (*GoLevelDB) Iterator

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

Implements DB.

func (*GoLevelDB) NewBatch

func (db *GoLevelDB) NewBatch() Batch

Implements DB.

func (*GoLevelDB) Print

func (db *GoLevelDB) Print()

Implements DB.

func (*GoLevelDB) ReverseIterator

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

Implements DB.

func (*GoLevelDB) Set

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

Implements DB.

func (*GoLevelDB) SetSync

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

Implements DB.

func (*GoLevelDB) Stats

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

Implements DB.

type Iterator

type Iterator interface {

	// The start & end (exclusive) limits to iterate over.
	// If end < start, then the Iterator goes in reverse order.
	//
	// A domain of ([]byte{12, 13}, []byte{12, 14}) will iterate
	// over anything with the prefix []byte{12, 13}.
	//
	// The smallest key is the empty byte array []byte{} - see BeginningKey().
	// The largest key is the nil byte array []byte(nil) - see EndingKey().
	// CONTRACT: start, end readonly []byte
	Domain() (start []byte, end []byte)

	// Valid returns whether the current position is valid.
	// Once invalid, an Iterator is forever invalid.
	Valid() bool

	// Next moves the iterator to the next sequential key in the database, as
	// defined by order of iteration.
	//
	// If Valid returns false, this method will panic.
	Next()

	// Key returns the key of the cursor.
	// If Valid returns false, this method will panic.
	// CONTRACT: key readonly []byte
	Key() (key []byte)

	// Value returns the value of the cursor.
	// If Valid returns false, this method will panic.
	// CONTRACT: value readonly []byte
	Value() (value []byte)

	// Close releases the Iterator.
	Close()
}

Usage:

var itr Iterator = ... defer itr.Close()

for ; itr.Valid(); itr.Next() {
	k, v := itr.Key(); itr.Value()
	// ...
}

func IteratePrefix

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

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

type MemDB

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

func NewMemDB

func NewMemDB() *MemDB

func (*MemDB) Close

func (db *MemDB) Close()

Implements DB.

func (*MemDB) Delete

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

Implements DB.

func (*MemDB) DeleteNoLock

func (db *MemDB) DeleteNoLock(key []byte)

Implements atomicSetDeleter.

func (*MemDB) DeleteNoLockSync

func (db *MemDB) DeleteNoLockSync(key []byte)

Implements atomicSetDeleter.

func (*MemDB) DeleteSync

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

Implements DB.

func (*MemDB) Get

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

Implements DB.

func (*MemDB) Has

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

Implements DB.

func (*MemDB) Iterator

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

Implements DB.

func (*MemDB) Mutex

func (db *MemDB) Mutex() *sync.Mutex

Implements atomicSetDeleter.

func (*MemDB) NewBatch

func (db *MemDB) NewBatch() Batch

Implements DB.

func (*MemDB) Print

func (db *MemDB) Print()

Implements DB.

func (*MemDB) ReverseIterator

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

Implements DB.

func (*MemDB) Set

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

Implements DB.

func (*MemDB) SetNoLock

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

Implements atomicSetDeleter.

func (*MemDB) SetNoLockSync

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

Implements atomicSetDeleter.

func (*MemDB) SetSync

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

Implements DB.

func (*MemDB) Stats

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

Implements DB.

type PrefixDB

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

func NewPrefixDB

func NewPrefixDB(db DB, prefix []byte) *PrefixDB

NewPrefixDB lets you namespace multiple DBs within a single DB.

func (*PrefixDB) Close

func (pdb *PrefixDB) Close()

Implements DB.

func (*PrefixDB) Delete

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

Implements DB.

func (*PrefixDB) DeleteSync

func (pdb *PrefixDB) DeleteSync(key []byte)

Implements DB.

func (*PrefixDB) Get

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

Implements DB.

func (*PrefixDB) Has

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

Implements DB.

func (*PrefixDB) Iterator

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

Implements DB.

func (*PrefixDB) Mutex

func (pdb *PrefixDB) Mutex() *sync.Mutex

Implements atomicSetDeleter.

func (*PrefixDB) NewBatch

func (pdb *PrefixDB) NewBatch() Batch

Implements DB. Panics if the underlying DB is not an atomicSetDeleter.

func (*PrefixDB) Print

func (pdb *PrefixDB) Print()

Implements DB.

func (*PrefixDB) ReverseIterator

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

Implements DB.

func (*PrefixDB) Set

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

Implements DB.

func (*PrefixDB) SetSync

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

Implements DB.

func (*PrefixDB) Stats

func (pdb *PrefixDB) Stats() map[string]string

Implements DB.

type SetDeleter

type SetDeleter interface {
	Set(key, value []byte) // CONTRACT: key, value readonly []byte
	Delete(key []byte)     // CONTRACT: key readonly []byte
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL