upsdb

package
v0.0.0-...-48d19ed Latest Latest
Warning

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

Go to latest
Published: Aug 3, 2021 License: GPL-3.0 Imports: 15 Imported by: 0

Documentation

Index

Constants

View Source
const IdealBatchSize = 100 * 1024

Code using batches should try to add this much data to the batch. The value was determined empirically.

Variables

View Source
var OpenFileLimit = 64

Functions

This section is empty.

Types

type AncientReader

type AncientReader interface {
	// HasAncient returns an indicator whether the specified data exists in the
	// ancient store.
	HasAncient(kind string, number uint64) (bool, error)

	// Ancient retrieves an ancient binary blob from the append-only immutable files.
	Ancient(kind string, number uint64) ([]byte, error)

	// Ancients returns the ancient item numbers in the ancient store.
	Ancients() (uint64, error)

	// AncientSize returns the ancient size of the specified category.
	AncientSize(kind string) (uint64, error)
}

AncientReader contains the methods required to read from immutable ancient data.

type AncientWriter

type AncientWriter interface {
	// AppendAncient injects all binary blobs belong to block at the end of the
	// append-only immutable table files.
	AppendAncient(number uint64, hash, header, body, receipt, td []byte) error

	// TruncateAncients discards all but the first n ancient data from the ancient store.
	TruncateAncients(n uint64) error

	// Sync flushes all in-memory ancient store data to disk.
	Sync() error
}

AncientWriter contains the methods required to write to immutable ancient data.

type Batch

type Batch interface {
	Putter
	Deleter
	//KeyValueWriter
	Iteratee
	ValueSize() int // amount of data in the batch
	Write() error
	// Reset resets the batch for reuse
	Reset()
	Replay(w KeyValueWriter) error
}

Batch is a write-only database that commits changes to its host database when Write is called. Batch cannot be used concurrently.

func NewTableBatch

func NewTableBatch(db Database, prefix string) Batch

NewTableBatch returns a Batch object which prefixes all keys with a given string.

type Batcher

type Batcher interface {
	// NewBatch creates a write-only database that buffers changes to its host db
	// until a final write is called.
	NewBatch() Batch
}

Batcher wraps the NewBatch method of a backing data store.

type Compacter

type Compacter interface {
	// Compact flattens the underlying data store for the given key range. In essence,
	// deleted and overwritten versions are discarded, and the data is rearranged to
	// reduce the cost of operations needed to access them.
	//
	// A nil start is treated as a key before all keys in the data store; a nil limit
	// is treated as a key after all keys in the data store. If both is nil then it
	// will compact entire data store.
	Compact(start []byte, limit []byte) error
}

Compacter wraps the Compact method of a backing data store.

type Database

type Database interface {
	Putter
	Deleter
	//KeyValueWriter
	Get(key []byte) ([]byte, error)
	Has(key []byte) (bool, error)
	Close()
	NewBatch() Batch
	Stater
	Compacter
	AncientReader
	AncientWriter
	Iteratee
}

Database wraps all database operations. All methods are safe for concurrent use.

func NewTable

func NewTable(db Database, prefix string) Database

NewTable returns a Database object that prefixes all keys with a given string.

type Deleter

type Deleter interface {
	Delete(key []byte) error
}

Deleter wraps the database delete operation supported by both batches and regular databases.

type Iteratee

type Iteratee interface {
	// NewIterator creates a binary-alphabetical iterator over the entire keyspace
	// contained within the key-value database.
	NewIterator() Iterator

	// NewIteratorWithStart creates a binary-alphabetical iterator over a subset of
	// database content starting at a particular initial key (or after, if it does
	// not exist).
	NewIteratorWithStart(start []byte) Iterator

	// NewIteratorWithPrefix creates a binary-alphabetical iterator over a subset
	// of database content with a particular key prefix.
	NewIteratorWithPrefix(prefix []byte) Iterator
}

Iteratee wraps the NewIterator methods of a backing data store.

type Iterator

type Iterator interface {
	// Next moves the iterator to the next key/value pair. It returns whether the
	// iterator is exhausted.
	Next() bool

	// Error returns any accumulated error. Exhausting all the key/value pairs
	// is not considered to be an error.
	Error() error

	// Key returns the key of the current key/value pair, or nil if done. The caller
	// should not modify the contents of the returned slice, and its contents may
	// change on the next call to Next.
	Key() []byte

	// Value returns the value of the current key/value pair, or nil if done. The
	// caller should not modify the contents of the returned slice, and its contents
	// may change on the next call to Next.
	Value() []byte

	// Release releases associated resources. Release should always succeed and can
	// be called multiple times without causing error.
	Release()
}

Iterator iterates over a database's key/value pairs in ascending key order.

When it encounters an error any seek will return false and will yield no key/ value pairs. The error can be queried by calling the Error method. Calling Release is still necessary.

An iterator must be released after use, but it is not necessary to read an iterator until exhaustion. An iterator is not safe for concurrent use, but it is safe to use multiple iterators concurrently.

type KeyValueStore

type KeyValueStore interface {
	KeyValueWriter
	Batcher
	Iteratee
	Stater
	Compacter
	io.Closer
}

KeyValueStore contains all the methods required to allow handling different key-value data stores backing the high level database.

type KeyValueWriter

type KeyValueWriter interface {
	// Put inserts the given value into the key-value data store.
	Put(key []byte, value []byte) error

	// Delete removes the key from the key-value data store.
	Delete(key []byte) error
}

KeyValueWriter wraps the Put method of a backing data store.

type LDBDatabase

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

func NewLDBDatabase

func NewLDBDatabase(file string, cache int, handles int) (*LDBDatabase, error)

NewLDBDatabase returns a LevelDB wrapped object.

func (*LDBDatabase) Ancient

func (db *LDBDatabase) Ancient(kind string, number uint64) ([]byte, error)

func (*LDBDatabase) AncientSize

func (db *LDBDatabase) AncientSize(kind string) (uint64, error)

func (*LDBDatabase) Ancients

func (db *LDBDatabase) Ancients() (uint64, error)

func (*LDBDatabase) AppendAncient

func (db *LDBDatabase) AppendAncient(number uint64, hash, header, body, receipt, td []byte) error

func (*LDBDatabase) Close

func (db *LDBDatabase) Close()

func (*LDBDatabase) Compact

func (db *LDBDatabase) Compact(start []byte, limit []byte) error

func (*LDBDatabase) Delete

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

Delete deletes the key from the queue and database

func (*LDBDatabase) Get

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

Get returns the given key if it's present.

func (*LDBDatabase) Has

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

func (*LDBDatabase) HasAncient

func (db *LDBDatabase) HasAncient(kind string, number uint64) (bool, error)

func (*LDBDatabase) LDB

func (db *LDBDatabase) LDB() *leveldb.DB

func (*LDBDatabase) Meter

func (db *LDBDatabase) Meter(prefix string)

Meter configures the database metrics collectors and

func (*LDBDatabase) NewBatch

func (db *LDBDatabase) NewBatch() Batch

func (*LDBDatabase) NewIterator

func (db *LDBDatabase) NewIterator() Iterator

func (*LDBDatabase) NewIteratorWithPrefix

func (db *LDBDatabase) NewIteratorWithPrefix(prefix []byte) Iterator

func (*LDBDatabase) NewIteratorWithStart

func (db *LDBDatabase) NewIteratorWithStart(start []byte) Iterator

NewIteratorWithStart creates a binary-alphabetical iterator over a subset of database content starting at a particular initial key (or after, if it does not exist).

func (*LDBDatabase) Path

func (db *LDBDatabase) Path() string

Path returns the path to the database directory.

func (*LDBDatabase) Put

func (db *LDBDatabase) Put(key []byte, value []byte) error

Put puts the given key / value to the queue

func (*LDBDatabase) Stat

func (db *LDBDatabase) Stat(property string) (string, error)

func (*LDBDatabase) Sync

func (db *LDBDatabase) Sync() error

func (*LDBDatabase) TruncateAncients

func (db *LDBDatabase) TruncateAncients(n uint64) error

type MemDatabase

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

* This is a test memory database. Do not use for any production it does not get persisted

func NewMemDatabase

func NewMemDatabase() *MemDatabase

func NewMemDatabaseWithCap

func NewMemDatabaseWithCap(size int) *MemDatabase

func (*MemDatabase) Ancient

func (db *MemDatabase) Ancient(kind string, number uint64) ([]byte, error)

func (*MemDatabase) AncientSize

func (db *MemDatabase) AncientSize(kind string) (uint64, error)

func (*MemDatabase) Ancients

func (db *MemDatabase) Ancients() (uint64, error)

func (*MemDatabase) AppendAncient

func (db *MemDatabase) AppendAncient(number uint64, hash, header, body, receipt, td []byte) error

func (*MemDatabase) Close

func (db *MemDatabase) Close()

func (*MemDatabase) Compact

func (db *MemDatabase) Compact(start []byte, limit []byte) error

func (*MemDatabase) Delete

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

func (*MemDatabase) Get

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

func (*MemDatabase) Has

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

func (*MemDatabase) HasAncient

func (db *MemDatabase) HasAncient(kind string, number uint64) (bool, error)

func (*MemDatabase) Keys

func (db *MemDatabase) Keys() [][]byte

func (*MemDatabase) Len

func (db *MemDatabase) Len() int

func (*MemDatabase) NewBatch

func (db *MemDatabase) NewBatch() Batch

func (*MemDatabase) NewIterator

func (db *MemDatabase) NewIterator() Iterator

NewIterator creates a binary-alphabetical iterator over the entire keyspace contained within the memory database.

func (*MemDatabase) NewIteratorWithPrefix

func (db *MemDatabase) NewIteratorWithPrefix(prefix []byte) Iterator

NewIteratorWithPrefix creates a binary-alphabetical iterator over a subset of database content with a particular key prefix.

func (*MemDatabase) NewIteratorWithStart

func (db *MemDatabase) NewIteratorWithStart(start []byte) Iterator

NewIteratorWithStart creates a binary-alphabetical iterator over a subset of database content starting at a particular initial key (or after, if it does not exist).

func (*MemDatabase) Put

func (db *MemDatabase) Put(key []byte, value []byte) error

func (*MemDatabase) Stat

func (db *MemDatabase) Stat(property string) (string, error)

func (*MemDatabase) Sync

func (db *MemDatabase) Sync() error

func (*MemDatabase) TruncateAncients

func (db *MemDatabase) TruncateAncients(n uint64) error

type Putter

type Putter interface {
	Put(key []byte, value []byte) error
}

Putter wraps the database write operation supported by both batches and regular databases.

type Reader

type Reader interface {
	AncientReader
}

Reader contains the methods required to read data from both key-value as well as immutable ancient data.

type Stater

type Stater interface {
	// Stat returns a particular internal stat of the database.
	Stat(property string) (string, error)
}

Stater wraps the Stat method of a backing data store.

type Writer

type Writer interface {
	KeyValueWriter
	AncientWriter
}

Writer contains the methods required to write data to both key-value as well as immutable ancient data.

Jump to

Keyboard shortcuts

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