Documentation ¶
Index ¶
- func FileExists(filePath string) bool
- func IsKeyInDomain(key, start, end []byte) bool
- type BackendType
- type Batch
- type DB
- type FSDB
- func (db *FSDB) Close()
- func (db *FSDB) Delete(key []byte)
- func (db *FSDB) DeleteNoLock(key []byte)
- func (db *FSDB) DeleteSync(key []byte)
- func (db *FSDB) Get(key []byte) []byte
- func (db *FSDB) Has(key []byte) bool
- func (db *FSDB) Iterator(start, end []byte) Iterator
- func (db *FSDB) MakeIterator(start, end []byte, isReversed bool) Iterator
- func (db *FSDB) Mutex() *sync.Mutex
- func (db *FSDB) NewBatch() Batch
- func (db *FSDB) Print()
- func (db *FSDB) ReverseIterator(start, end []byte) Iterator
- func (db *FSDB) Set(key []byte, value []byte)
- func (db *FSDB) SetNoLock(key []byte, value []byte)
- func (db *FSDB) SetSync(key []byte, value []byte)
- func (db *FSDB) Stats() map[string]string
- type GoLevelDB
- func (db *GoLevelDB) Close()
- func (db *GoLevelDB) DB() *leveldb.DB
- func (db *GoLevelDB) Delete(key []byte)
- func (db *GoLevelDB) DeleteSync(key []byte)
- func (db *GoLevelDB) Get(key []byte) []byte
- func (db *GoLevelDB) Has(key []byte) bool
- func (db *GoLevelDB) Iterator(start, end []byte) Iterator
- func (db *GoLevelDB) NewBatch() Batch
- func (db *GoLevelDB) Print()
- func (db *GoLevelDB) ReverseIterator(start, end []byte) Iterator
- func (db *GoLevelDB) Set(key []byte, value []byte)
- func (db *GoLevelDB) SetSync(key []byte, value []byte)
- func (db *GoLevelDB) Stats() map[string]string
- type Iterator
- type MemDB
- func (db *MemDB) Close()
- func (db *MemDB) Delete(key []byte)
- func (db *MemDB) DeleteNoLock(key []byte)
- func (db *MemDB) DeleteNoLockSync(key []byte)
- func (db *MemDB) DeleteSync(key []byte)
- func (db *MemDB) Get(key []byte) []byte
- func (db *MemDB) Has(key []byte) bool
- func (db *MemDB) Iterator(start, end []byte) Iterator
- func (db *MemDB) Mutex() *sync.Mutex
- func (db *MemDB) NewBatch() Batch
- func (db *MemDB) Print()
- func (db *MemDB) ReverseIterator(start, end []byte) Iterator
- func (db *MemDB) Set(key []byte, value []byte)
- func (db *MemDB) SetNoLock(key []byte, value []byte)
- func (db *MemDB) SetNoLockSync(key []byte, value []byte)
- func (db *MemDB) SetSync(key []byte, value []byte)
- func (db *MemDB) Stats() map[string]string
- type PrefixDB
- func (pdb *PrefixDB) Close()
- func (pdb *PrefixDB) Delete(key []byte)
- func (pdb *PrefixDB) DeleteSync(key []byte)
- func (pdb *PrefixDB) Get(key []byte) []byte
- func (pdb *PrefixDB) Has(key []byte) bool
- func (pdb *PrefixDB) Iterator(start, end []byte) Iterator
- func (pdb *PrefixDB) Mutex() *sync.Mutex
- func (pdb *PrefixDB) NewBatch() Batch
- func (pdb *PrefixDB) Print()
- func (pdb *PrefixDB) ReverseIterator(start, end []byte) Iterator
- func (pdb *PrefixDB) Set(key []byte, value []byte)
- func (pdb *PrefixDB) SetSync(key []byte, value []byte)
- func (pdb *PrefixDB) Stats() map[string]string
- type SetDeleter
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func FileExists ¶
func IsKeyInDomain ¶
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.
type FSDB ¶
type FSDB struct {
// contains filtered or unexported fields
}
It's slow.
func (*FSDB) DeleteNoLock ¶
NOTE: Implements atomicSetDeleter.
func (*FSDB) DeleteSync ¶
func (*FSDB) MakeIterator ¶
func (*FSDB) ReverseIterator ¶
type GoLevelDB ¶
type GoLevelDB struct {
// contains filtered or unexported fields
}
func NewGoLevelDBWithOpts ¶
func (*GoLevelDB) ReverseIterator ¶
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 ¶
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 (*MemDB) DeleteNoLockSync ¶
Implements atomicSetDeleter.
func (*MemDB) ReverseIterator ¶
Implements DB.
func (*MemDB) SetNoLockSync ¶
Implements atomicSetDeleter.
type PrefixDB ¶
type PrefixDB struct {
// contains filtered or unexported fields
}
func NewPrefixDB ¶
NewPrefixDB lets you namespace multiple DBs within a single DB.
func (*PrefixDB) ReverseIterator ¶
Implements DB.
type SetDeleter ¶
Click to show internal directories.
Click to hide internal directories.