/**
|
|
* @file
|
|
* @copyright defined in aergo/LICENSE.txt
|
|
*/
|
|
|
|
package db
|
|
|
|
// ImplType represents implementators of a DB interface
|
|
type ImplType string
|
|
|
|
const (
|
|
// LevelImpl represents a name of DB interface implementation using leveldb
|
|
LevelImpl ImplType = "leveldb"
|
|
|
|
// MemoryImpl represents a name of DB interface implementation in memory
|
|
MemoryImpl ImplType = "memorydb"
|
|
)
|
|
|
|
type dbConstructor func(dir string) (DB, error)
|
|
|
|
// DB is an general interface to access at storage data
|
|
type DB interface {
|
|
Type() string
|
|
Set(key, value []byte)
|
|
Delete(key []byte)
|
|
Get(key []byte) []byte
|
|
Exist(key []byte) bool
|
|
Iterator(start, end []byte) Iterator
|
|
NewTx() Transaction
|
|
NewBulk() Bulk
|
|
Close()
|
|
//Print()
|
|
//Stats() map[string]string
|
|
}
|
|
|
|
// Transaction is used to batch multiple operations
|
|
type Transaction interface {
|
|
// Get(key []byte) []byte
|
|
Set(key, value []byte)
|
|
Delete(key []byte)
|
|
Commit()
|
|
Discard()
|
|
}
|
|
|
|
// Bulk is used to batch multiple transactions
|
|
// This will internally commit transactions when reach maximum tx size
|
|
type Bulk interface {
|
|
Set(key, value []byte)
|
|
Delete(key []byte)
|
|
Flush()
|
|
DiscardLast()
|
|
}
|
|
|
|
// Iterator is used to navigate specific key ranges
|
|
type Iterator interface {
|
|
Next()
|
|
Valid() bool
|
|
Key() []byte
|
|
Value() []byte
|
|
}
|