db

package module
v0.0.0-...-ad6b0ef Latest Latest
Warning

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

Go to latest
Published: Dec 18, 2019 License: Apache-2.0 Imports: 15 Imported by: 0

README

Tendermint DB Extra

This is a derived work from https://github.com/tendermint/tm-db v0.2.0 release

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.

func NewPrefixDB

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

NewPrefixDB lets you namespace multiple DBs within a single DB.

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 DBBackendType, 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 DBBackendType

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

These are valid backend types.

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 SetDeleter

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

Directories

Path Synopsis
remotedb is a package for connecting to distributed Tendermint db.DB instances.
remotedb is a package for connecting to distributed Tendermint db.DB instances.
grpcdb
grpcdb is the distribution of Tendermint's db.DB instances using the gRPC transport to decouple local db.DB usages from applications, to using them over a network in a highly performant manner.
grpcdb is the distribution of Tendermint's db.DB instances using the gRPC transport to decouple local db.DB usages from applications, to using them over a network in a highly performant manner.
proto
Package protodb is a generated protocol buffer package.
Package protodb is a generated protocol buffer package.

Jump to

Keyboard shortcuts

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