Documentation
¶
Overview ¶
Package nutsdb implements a simple, fast, embeddable and persistent key/value store written in pure Go. It supports fully serializable transactions. And it also supports data structure such as list、set、sorted set etc.
NutsDB currently works on Mac OS, Linux and Windows.
Usage ¶
NutsDB has the following main types: DB, BPTree, Entry, DataFile And Tx. and NutsDB supports bucket, A bucket is a collection of unique keys that are associated with values.
All operations happen inside a Tx. Tx represents a transaction, which can be read-only or read-write. Read-only transactions can read values for a given key , or iterate over a set of key-value pairs (prefix scanning or range scanning). read-write transactions can also update and delete keys from the DB.
See the examples for more usage details.
Index ¶
- Constants
- Variables
- func ErrBucketAndKey(bucket string, key []byte) error
- func ErrNotFoundKeyInBucket(bucket string, key []byte) error
- func ErrSeparatorForZSetKey() error
- func GetMergeFileID(seq int) int64
- func GetMergeSeq(fileID int64) int
- func IsBucketEmpty(err error) bool
- func IsBucketNotFound(err error) bool
- func IsDBClosed(err error) bool
- func IsKeyEmpty(err error) bool
- func IsKeyNotFound(err error) bool
- func IsMergeFile(fileID int64) bool
- func IsPrefixScan(err error) bool
- func IsPrefixSearchScan(err error) bool
- func NewWatchManager() *watchManager
- type BTreeIdx
- type Bucket
- type BucketId
- type BucketManager
- func (bm *BucketManager) ExistBucket(ds Ds, name BucketName) bool
- func (bm *BucketManager) GetBucket(ds Ds, name BucketName) (b *Bucket, err error)
- func (bm *BucketManager) GetBucketById(id BucketId) (*Bucket, error)
- func (bm *BucketManager) GetBucketID(ds Ds, name BucketName) (BucketId, error)
- func (bm *BucketManager) SubmitPendingBucketChange(reqs []*bucketSubmitRequest) error
- type BucketMeta
- type BucketName
- type BucketOperation
- type BucketStatus
- type CEntries
- type DB
- func (db *DB) Backup(dir string) error
- func (db *DB) BackupTarGZ(w io.Writer) error
- func (db *DB) Begin(writable bool) (tx *Tx, err error)
- func (db *DB) Close() error
- func (db *DB) IsClose() bool
- func (db *DB) Merge() error
- func (db *DB) NewWriteBatch() (*WriteBatch, error)
- func (db *DB) Update(fn func(tx *Tx) error) error
- func (db *DB) View(fn func(tx *Tx) error) error
- func (db *DB) Watch(bucket string, key []byte, cb func(message *Message) error, ...) error
- type DataFile
- type DataFlag
- type DataStatus
- type DataStructure
- type Ds
- type Entries
- type Entry
- func (e *Entry) Encode() []byte
- func (e *Entry) GetCrc(buf []byte) uint32
- func (e *Entry) GetTxIDBytes() []byte
- func (e *Entry) IsBelongsToBPlusTree() bool
- func (e *Entry) IsBelongsToBTree() bool
- func (e *Entry) IsBelongsToList() bool
- func (e *Entry) IsBelongsToSet() bool
- func (e *Entry) IsBelongsToSortSet() bool
- func (e *Entry) IsZero() bool
- func (e *Entry) ParseMeta(buf []byte) (int64, error)
- func (e *Entry) ParsePayload(data []byte) error
- func (e *Entry) Size() int64
- func (e *Entry) WithKey(key []byte) *Entry
- func (e *Entry) WithMeta(meta *MetaData) *Entry
- func (e *Entry) WithValue(value []byte) *Entry
- type EntryIdxMode
- type EntryStatus
- type EntryWhenRecovery
- type ErrorHandler
- type ErrorHandlerFunc
- type ExpiredDeleteType
- type FileManager
- func (fm *FileManager) Close() error
- func (fm *FileManager) GetDataFile(path string, capacity int64) (datafile *DataFile, err error)
- func (fm *FileManager) GetDataFileByID(dir string, fileID int64, capacity int64) (*DataFile, error)
- func (fm *FileManager) GetDataFileReadOnly(path string, capacity int64) (datafile *DataFile, err error)
- func (fm *FileManager) GetFileRWManager(path string, capacity int64, segmentSize int64, readOnly bool) (*fileio.FileIORWManager, error)
- func (fm *FileManager) GetMMapRWManager(path string, capacity int64, segmentSize int64, readOnly bool) (*fileio.MMapRWManager, error)
- type GetByScoreRangeOptions
- type HintCollector
- type HintEntry
- type HintFileReader
- type HintFileWriter
- type IDGenerator
- type IDMarkerInBucket
- type IdxType
- type InfoMapperInBucket
- type Iterator
- type IteratorOptions
- type LessFunc
- type ListIdx
- type ListImplementationType
- type Message
- type MessageOptions
- type MessagePriority
- type MetaData
- func (meta *MetaData) IsBTree() bool
- func (meta *MetaData) IsList() bool
- func (meta *MetaData) IsSet() bool
- func (meta *MetaData) IsSortSet() bool
- func (meta *MetaData) PayloadSize() int64
- func (meta *MetaData) Size() int64
- func (meta *MetaData) WithBucketId(bucketID uint64) *MetaData
- func (meta *MetaData) WithBucketSize(bucketSize uint32) *MetaData
- func (meta *MetaData) WithCrc(crc uint32) *MetaData
- func (meta *MetaData) WithDs(ds uint16) *MetaData
- func (meta *MetaData) WithFlag(flag uint16) *MetaData
- func (meta *MetaData) WithKeySize(keySize uint32) *MetaData
- func (meta *MetaData) WithStatus(status uint16) *MetaData
- func (meta *MetaData) WithTTL(ttl uint32) *MetaData
- func (meta *MetaData) WithTimeStamp(timestamp uint64) *MetaData
- func (meta *MetaData) WithTxID(txID uint64) *MetaData
- func (meta *MetaData) WithValueSize(valueSize uint32) *MetaData
- type Option
- func WithBufferSizeOfRecovery(size int) Option
- func WithCleanFdsCacheThreshold(threshold float64) Option
- func WithCommitBufferSize(commitBufferSize int64) Option
- func WithDir(dir string) Option
- func WithEnableHintFile(enable bool) Option
- func WithEnableMergeV2(enable bool) Option
- func WithEntryIdxMode(entryIdxMode EntryIdxMode) Option
- func WithErrorHandler(errorHandler ErrorHandler) Option
- func WithGCWhenClose(enable bool) Option
- func WithHintKeyAndRAMIdxCacheSize(size int) Option
- func WithLessFunc(lessFunc LessFunc) Option
- func WithListImpl(implType ListImplementationType) Option
- func WithMaxBatchCount(count int64) Option
- func WithMaxBatchSize(size int64) Option
- func WithMaxFdNumsInCache(num int) Option
- func WithMaxWriteRecordCount(maxWriteRecordCount int64) Option
- func WithNodeNum(num int64) Option
- func WithRWMode(rwMode RWMode) Option
- func WithSegmentSize(size int64) Option
- func WithSyncEnable(enable bool) Option
- type Options
- type RWMode
- type SCORE
- type SetIdx
- type SkipList
- func (sl *SkipList) FindRank(hash uint32) int
- func (sl *SkipList) FindRevRank(hash uint32) int
- func (sl *SkipList) GetByRank(rank int, remove bool) *SkipListNode
- func (sl *SkipList) GetByRankRange(start, end int, remove bool) []*SkipListNode
- func (sl *SkipList) GetByScoreRange(start SCORE, end SCORE, options *GetByScoreRangeOptions) []*SkipListNode
- func (sl *SkipList) GetByValue(value []byte) *SkipListNode
- func (sl *SkipList) PeekMax() *SkipListNode
- func (sl *SkipList) PeekMin() *SkipListNode
- func (sl *SkipList) PopMax() *SkipListNode
- func (sl *SkipList) PopMin() *SkipListNode
- func (sl *SkipList) Put(score SCORE, value []byte, record *data.Record) error
- func (sl *SkipList) Remove(hash uint32) *SkipListNode
- func (sl *SkipList) Size() int
- type SkipListLevel
- type SkipListNode
- type SnowflakeManager
- type SortedSet
- func (z *SortedSet) ZAdd(key string, score SCORE, value []byte, record *data.Record) error
- func (z *SortedSet) ZCard(key string) (int, error)
- func (z *SortedSet) ZCount(key string, start SCORE, end SCORE, opts *GetByScoreRangeOptions) (int, error)
- func (z *SortedSet) ZExist(key string, value []byte) (bool, error)
- func (z *SortedSet) ZMembers(key string) (map[*data.Record]SCORE, error)
- func (z *SortedSet) ZPeekMax(key string) (*data.Record, SCORE, error)
- func (z *SortedSet) ZPeekMin(key string) (*data.Record, SCORE, error)
- func (z *SortedSet) ZPopMax(key string) (*data.Record, SCORE, error)
- func (z *SortedSet) ZPopMin(key string) (*data.Record, SCORE, error)
- func (z *SortedSet) ZRangeByRank(key string, start int, end int) ([]*data.Record, []float64, error)
- func (z *SortedSet) ZRangeByScore(key string, start SCORE, end SCORE, opts *GetByScoreRangeOptions) ([]*data.Record, []float64, error)
- func (z *SortedSet) ZRank(key string, value []byte) (int, error)
- func (z *SortedSet) ZRem(key string, value []byte) (*data.Record, error)
- func (z *SortedSet) ZRemRangeByRank(key string, start int, end int) error
- func (z *SortedSet) ZRevRank(key string, value []byte) (int, error)
- func (z *SortedSet) ZScore(key string, value []byte) (float64, error)
- type SortedSetIdx
- type SortedSetMember
- type Throttle
- type Tx
- func (tx *Tx) Append(bucket string, key, appendage []byte) error
- func (tx *Tx) CheckExpire(bucket string, key []byte) bool
- func (tx *Tx) Commit() (err error)
- func (tx *Tx) CommitWith(cb func(error))
- func (tx *Tx) Decr(bucket string, key []byte) error
- func (tx *Tx) DecrBy(bucket string, key []byte, decrement int64) error
- func (tx *Tx) Delete(bucket string, key []byte) error
- func (tx *Tx) DeleteBucket(ds uint16, bucket string) error
- func (tx *Tx) ExistBucket(ds uint16, bucket string) bool
- func (tx *Tx) ExpireList(bucket string, key []byte, ttl uint32) error
- func (tx *Tx) Get(bucket string, key []byte) (value []byte, err error)
- func (tx *Tx) GetAll(bucket string) ([][]byte, [][]byte, error)
- func (tx *Tx) GetBit(bucket string, key []byte, offset int) (byte, error)
- func (tx *Tx) GetKeys(bucket string) ([][]byte, error)
- func (tx *Tx) GetListTTL(bucket string, key []byte) (uint32, error)
- func (tx *Tx) GetMaxKey(bucket string) ([]byte, error)
- func (tx *Tx) GetMinKey(bucket string) ([]byte, error)
- func (tx *Tx) GetRange(bucket string, key []byte, start, end int) ([]byte, error)
- func (tx *Tx) GetSet(bucket string, key, value []byte) (oldValue []byte, err error)
- func (tx *Tx) GetTTL(bucket string, key []byte) (int64, error)
- func (tx *Tx) GetValues(bucket string) ([][]byte, error)
- func (tx *Tx) Has(bucket string, key []byte) (exists bool, err error)
- func (tx *Tx) Incr(bucket string, key []byte) error
- func (tx *Tx) IncrBy(bucket string, key []byte, increment int64) error
- func (tx *Tx) IterateBuckets(ds uint16, pattern string, f func(bucket string) bool) error
- func (tx *Tx) LKeys(bucket, pattern string, f func(key string) bool) error
- func (tx *Tx) LPeek(bucket string, key []byte) (item []byte, err error)
- func (tx *Tx) LPop(bucket string, key []byte) (item []byte, err error)
- func (tx *Tx) LPush(bucket string, key []byte, values ...[]byte) error
- func (tx *Tx) LPushRaw(bucket string, key []byte, values ...[]byte) error
- func (tx *Tx) LRange(bucket string, key []byte, start, end int) ([][]byte, error)
- func (tx *Tx) LRem(bucket string, key []byte, count int, value []byte) error
- func (tx *Tx) LRemByIndex(bucket string, key []byte, indexes ...int) error
- func (tx *Tx) LSize(bucket string, key []byte) (int, error)
- func (tx *Tx) LTrim(bucket string, key []byte, start, end int) error
- func (tx *Tx) MGet(bucket string, keys ...[]byte) ([][]byte, error)
- func (tx *Tx) MSet(bucket string, ttl uint32, args ...[]byte) error
- func (tx *Tx) NewBucket(ds uint16, name string) (err error)
- func (tx *Tx) NewKVBucket(name string) error
- func (tx *Tx) NewListBucket(name string) error
- func (tx *Tx) NewSetBucket(name string) error
- func (tx *Tx) NewSortSetBucket(name string) error
- func (tx *Tx) Persist(bucket string, key []byte) error
- func (tx *Tx) PrefixScan(bucket string, prefix []byte, offsetNum int, limitNum int) (values [][]byte, err error)
- func (tx *Tx) PrefixScanEntries(bucket string, prefix []byte, reg string, offsetNum int, limitNum int, ...) (keys, values [][]byte, err error)
- func (tx *Tx) PrefixSearchScan(bucket string, prefix []byte, reg string, offsetNum int, limitNum int) (values [][]byte, err error)
- func (tx *Tx) Put(bucket string, key, value []byte, ttl uint32) error
- func (tx *Tx) PutIfExists(bucket string, key, value []byte, ttl uint32) error
- func (tx *Tx) PutIfNotExists(bucket string, key, value []byte, ttl uint32) error
- func (tx *Tx) PutWithTimestamp(bucket string, key, value []byte, ttl uint32, timestamp uint64) error
- func (tx *Tx) RPeek(bucket string, key []byte) ([]byte, error)
- func (tx *Tx) RPop(bucket string, key []byte) (item []byte, err error)
- func (tx *Tx) RPush(bucket string, key []byte, values ...[]byte) error
- func (tx *Tx) RPushRaw(bucket string, key []byte, values ...[]byte) error
- func (tx *Tx) RangeScan(bucket string, start, end []byte) (values [][]byte, err error)
- func (tx *Tx) RangeScanEntries(bucket string, start, end []byte, includeKeys, includeValues bool) (keys, values [][]byte, err error)
- func (tx *Tx) Rollback() error
- func (tx *Tx) SAdd(bucket string, key []byte, items ...[]byte) error
- func (tx *Tx) SAreMembers(bucket string, key []byte, items ...[]byte) (bool, error)
- func (tx *Tx) SCard(bucket string, key []byte) (int, error)
- func (tx *Tx) SDiffByOneBucket(bucket string, key1, key2 []byte) ([][]byte, error)
- func (tx *Tx) SDiffByTwoBuckets(bucket1 string, key1 []byte, bucket2 string, key2 []byte) ([][]byte, error)
- func (tx *Tx) SHasKey(bucket string, key []byte) (bool, error)
- func (tx *Tx) SIsMember(bucket string, key, item []byte) (bool, error)
- func (tx *Tx) SKeys(bucket, pattern string, f func(key string) bool) error
- func (tx *Tx) SMembers(bucket string, key []byte) ([][]byte, error)
- func (tx *Tx) SMoveByOneBucket(bucket string, key1, key2, item []byte) (bool, error)
- func (tx *Tx) SMoveByTwoBuckets(bucket1 string, key1 []byte, bucket2 string, key2, item []byte) (bool, error)
- func (tx *Tx) SPop(bucket string, key []byte) ([]byte, error)
- func (tx *Tx) SRem(bucket string, key []byte, items ...[]byte) error
- func (tx *Tx) SUnionByOneBucket(bucket string, key1, key2 []byte) ([][]byte, error)
- func (tx *Tx) SUnionByTwoBuckets(bucket1 string, key1 []byte, bucket2 string, key2 []byte) ([][]byte, error)
- func (tx *Tx) SetBit(bucket string, key []byte, offset int, bit byte) error
- func (tx *Tx) SubmitBucket() error
- func (tx *Tx) ValueLen(bucket string, key []byte) (int, error)
- func (tx *Tx) ZAdd(bucket string, key []byte, score float64, val []byte) error
- func (tx *Tx) ZCard(bucket string, key []byte) (int, error)
- func (tx *Tx) ZCheck(bucket string) error
- func (tx *Tx) ZCount(bucket string, key []byte, start, end float64, opts *GetByScoreRangeOptions) (int, error)
- func (tx *Tx) ZKeys(bucket, pattern string, f func(key string) bool) error
- func (tx *Tx) ZMembers(bucket string, key []byte) (map[*SortedSetMember]struct{}, error)
- func (tx *Tx) ZPeekMax(bucket string, key []byte) (*SortedSetMember, error)
- func (tx *Tx) ZPeekMin(bucket string, key []byte) (*SortedSetMember, error)
- func (tx *Tx) ZPopMax(bucket string, key []byte) (*SortedSetMember, error)
- func (tx *Tx) ZPopMin(bucket string, key []byte) (*SortedSetMember, error)
- func (tx *Tx) ZRangeByRank(bucket string, key []byte, start, end int) ([]*SortedSetMember, error)
- func (tx *Tx) ZRangeByScore(bucket string, key []byte, start, end float64, opts *GetByScoreRangeOptions) ([]*SortedSetMember, error)
- func (tx *Tx) ZRank(bucket string, key, value []byte) (int, error)
- func (tx *Tx) ZRem(bucket string, key []byte, value []byte) error
- func (tx *Tx) ZRemRangeByRank(bucket string, key []byte, start, end int) error
- func (tx *Tx) ZRevRank(bucket string, key, value []byte) (int, error)
- func (tx *Tx) ZScore(bucket string, key, value []byte) (float64, error)
- type WatchOptions
- type WriteBatch
- func (wb *WriteBatch) Cancel() error
- func (wb *WriteBatch) Delete(bucket string, key []byte) error
- func (wb *WriteBatch) Error() error
- func (wb *WriteBatch) Flush() error
- func (wb *WriteBatch) Put(bucket string, key, value []byte, ttl uint32) error
- func (wb *WriteBatch) Reset() error
- func (wb *WriteBatch) SetMaxPendingTxns(max int)
Constants ¶
const ( IdSize = 8 DsSize = 2 )
const ( MaxEntryHeaderSize = 4 + binary.MaxVarintLen32*3 + binary.MaxVarintLen64*3 + binary.MaxVarintLen16*3 MinEntryHeaderSize = 4 + 9 )
const ( // UnCommitted represents the tx unCommitted status UnCommitted uint16 = 0 // Committed represents the tx committed status Committed uint16 = 1 )
const ( // ListImplDoublyLinkedList uses doubly linked list implementation (default). // Advantages: O(1) head/tail operations, lower memory overhead // Best for: High-frequency LPush/RPush/LPop/RPop operations ListImplDoublyLinkedList = iota // ListImplBTree uses BTree implementation. // Advantages: O(log n + k) range queries, efficient random access // Best for: Frequent range queries or indexed access patterns ListImplBTree )
const ( // BucketStatusExistAlready means this bucket already exists BucketStatusExistAlready = 1 // BucketStatusDeleted means this bucket is already deleted BucketStatusDeleted = 2 // BucketStatusNew means this bucket is created in current Tx BucketStatusNew = 3 // BucketStatusUpdated means this bucket is updated in current Tx BucketStatusUpdated = 4 // BucketStatusUnknown means this bucket doesn't exist BucketStatusUnknown = 5 )
const ( // SkipListMaxLevel represents the skipList max level number. SkipListMaxLevel = 32 // SkipListP represents the p parameter of the skipList. SkipListP = 0.25 )
const ( MessagePriorityHigh = iota // the messages must be ensured to deliver to distributor MessagePriorityMedium = 1 // the messages may be dropped )
message priority
const BucketStoreFileName = "bucket.Meta"
const (
// DataSuffix returns the data suffix
DataSuffix = ".dat"
)
const (
DefaultCallbackTimeout = 1 * time.Second
)
const DefaultHintCollectorFlushEvery = 1024
const (
DefaultThrottleSize = 16
)
const FLockName = "nutsdb-flock"
const (
// HintSuffix returns the hint file suffix
HintSuffix = ".hint"
)
const KvWriteChCapacity = 1000
const MAX_SIZE = math.MaxUint32
const MergeFileIDBase int64 = math.MinInt64
const Persistent uint32 = data.Persistent
Persistent represents the data persistent flag
const ScanNoLimit int = -1
ScanNoLimit represents the data scan no limit flag
const SeparatorForListKey = "|"
SeparatorForListKey represents separator for listKey
const SeparatorForZSetKey = "|"
SeparatorForZSetKey represents separator for zSet key.
Variables ¶
var ( // ErrCrc is returned when crc is error ErrCrc = errors.New("crc error") // ErrCapacity is returned when capacity is error. ErrCapacity = errors.New("capacity error") ErrEntryZero = errors.New("entry is zero ") )
var ( // ErrDBClosed is returned when db is closed. ErrDBClosed = errors.New("db is closed") // ErrBucket is returned when bucket is not in the HintIdx. ErrBucket = errors.New("err bucket") // ErrFn is returned when fn is nil. ErrFn = errors.New("err fn") // ErrBucketNotFound is returned when looking for bucket that does not exist ErrBucketNotFound = errors.New("bucket not found") // ErrDataStructureNotSupported is returned when pass a not supported data structure ErrDataStructureNotSupported = errors.New("this data structure is not supported for now") // ErrDirLocked is returned when can't get the file lock of dir ErrDirLocked = errors.New("the dir of db is locked") // ErrDirUnlocked is returned when the file lock already unlocked ErrDirUnlocked = errors.New("the dir of db is unlocked") // ErrIsMerging is returned when merge in progress ErrIsMerging = errors.New("merge in progress") // ErrNotSupportMergeWhenUsingList is returned calling 'Merge' when using list ErrNotSupportMergeWhenUsingList = errors.New("not support merge when using list for now") // ErrRecordIsNil is returned when Record is nil ErrRecordIsNil = errors.New("the record is nil") // ErrWatchFeatureDisabled is returned when the watch feature is disabled ErrWatchFeatureDisabled = errors.New("watch feature is disabled") // ErrWatchingCallbackTimeout is returned when the callback timeout ErrWatchingCallbackTimeout = errors.New("watching callback timeout") )
var ( ErrPayLoadSizeMismatch = errors.New("the payload size in Meta mismatch with the payload size needed") ErrHeaderSizeOutOfBounds = errors.New("the header size is out of bounds") )
var ( // ErrHintFileCorrupted is returned when hint file is corrupted ErrHintFileCorrupted = errors.New("hint file is corrupted") // ErrHintFileEntryInvalid is returned when hint entry is invalid ErrHintFileEntryInvalid = errors.New("hint file entry is invalid") )
var ( ErrSortedSetNotFound = errors.New("the sortedSet does not exist") ErrSortedSetMemberNotExist = errors.New("the member of sortedSet does not exist") ErrSortedSetIsEmpty = errors.New("the sortedSet if empty") )
var ( // ErrDataSizeExceed is returned when given key and value size is too big. ErrDataSizeExceed = errors.New("data size too big") // ErrTxClosed is returned when committing or rolling back a transaction // that has already been committed or rolled back. ErrTxClosed = errors.New("tx is closed") // ErrTxNotWritable is returned when performing a write operation on // a read-only transaction. ErrTxNotWritable = errors.New("tx not writable") // ErrKeyEmpty is returned if an empty key is passed on an update function. ErrKeyEmpty = errors.New("key cannot be empty") // ErrBucketEmpty is returned if bucket is empty. ErrBucketEmpty = errors.New("bucket is empty") // ErrRangeScan is returned when range scanning not found the result ErrRangeScan = errors.New("range scans not found") // ErrPrefixScan is returned when prefix scanning not found the result ErrPrefixScan = errors.New("prefix scans not found") // ErrPrefixSearchScan is returned when prefix and search scanning not found the result ErrPrefixSearchScan = errors.New("prefix and search scans not found") // ErrNotFoundKey is returned when key not found int the bucket on an view function. ErrNotFoundKey = errors.New("key not found in the bucket") ErrKeyNotFound = ErrNotFoundKey // ErrCannotCommitAClosedTx is returned when the tx committing a closed tx ErrCannotCommitAClosedTx = errors.New("can not commit a closed tx") // ErrCannotRollbackACommittingTx is returned when the tx rollback a committing tx ErrCannotRollbackACommittingTx = errors.New("can not rollback a committing tx") ErrCannotRollbackAClosedTx = errors.New("can not rollback a closed tx") // ErrNotFoundBucket is returned when bucket not found int the bucket on an view function. ErrNotFoundBucket = errors.New("bucket not found") // ErrTxnTooBig is returned if too many writes are fit into a single transaction. ErrTxnTooBig = errors.New("txn is too big to fit into one request") // ErrTxnExceedWriteLimit is returned when this tx's write is exceed max write record ErrTxnExceedWriteLimit = errors.New("txn is exceed max write record count") ErrBucketAlreadyExist = errors.New("bucket is already exist") ErrValueNotInteger = errors.New("value is not an integer") ErrOffsetInvalid = errors.New("offset is invalid") ErrKVArgsLenNotEven = errors.New("parameters is used to represent key value pairs and cannot be odd numbers") ErrStartGreaterThanEnd = errors.New("start is greater than end") ErrInvalidKey = errors.New("invalid key") )
var ( // ErrListNotFound is returned when the list not found. ErrListNotFound = data.ErrListNotFound // ErrCount is returned when count is error. ErrCount = data.ErrCount // ErrEmptyList is returned when the list is empty. ErrEmptyList = data.ErrEmptyList // ErrStartOrEnd is returned when start > end ErrStartOrEnd = data.ErrStartOrEnd // ErrSeparatorForListKey returns when list key contains the SeparatorForListKey. ErrSeparatorForListKey = errors.Errorf("contain separator (%s) for List key", SeparatorForListKey) )
var ( // ErrSetNotExist is returned when the key does not exist. ErrSetNotExist = data.ErrSetNotExist // ErrSetMemberNotExist is returned when the member of set does not exist ErrSetMemberNotExist = data.ErrSetMemberNotExist // ErrMemberEmpty is returned when the item received is nil ErrMemberEmpty = data.ErrMemberEmpty )
var ( ErrBucketSubscriberNotFound = errors.New("bucket subscriber not found") ErrKeySubscriberNotFound = errors.New("key subscriber not found") ErrSubscriberNotFound = errors.New("subscriber not found") ErrWatchChanCannotSend = errors.New("watch channel cannot send") ErrKeyAlreadySubscribed = errors.New("key already subscribed") ErrWatchManagerClosed = errors.New("watch manager closed") ErrWatchingCallbackFailed = errors.New("watching callback failed") ErrWatchingChannelClosed = errors.New("watching channel closed") ErrChannelNotAvailable = errors.New("channel not available") )
errors
var BucketMetaSize int64
var DefaultOptions = func() Options { return Options{ EntryIdxMode: HintKeyValAndRAMIdxMode, SegmentSize: defaultSegmentSize, NodeNum: 1, RWMode: FileIO, SyncEnable: true, CommitBufferSize: 4 * MB, MergeInterval: 2 * time.Hour, MaxBatchSize: (15 * defaultSegmentSize / 4) / 100, MaxBatchCount: (15 * defaultSegmentSize / 4) / 100 / 100, HintKeyAndRAMIdxCacheSize: 0, ExpiredDeleteType: TimeWheel, EnableHintFile: false, EnableMergeV2: false, ListImpl: ListImplementationType(ListImplBTree), EnableWatch: false, } }()
DefaultOptions represents the default options.
var ErrBucketCrcInvalid = errors.New("bucket crc invalid")
var ErrBucketNotExist = errors.New("bucket not found")
var ErrCommitAfterFinish = errors.New("batch commit not permitted after finish")
ErrCommitAfterFinish indicates that write batch commit was called after
var ErrDontNeedMerge = errors.New("the number of files waiting to be merged is less than 2")
var (
ErrIndexOutOfBound = fileio.ErrIndexOutOfBound
)
Functions ¶
func ErrBucketAndKey ¶
ErrBucketAndKey returns when bucket or key not found.
func ErrNotFoundKeyInBucket ¶
ErrNotFoundKeyInBucket returns when key not in the bucket.
func ErrSeparatorForZSetKey ¶
func ErrSeparatorForZSetKey() error
ErrSeparatorForZSetKey returns when zSet key contains the SeparatorForZSetKey flag.
func GetMergeFileID ¶ added in v1.1.0
func GetMergeSeq ¶ added in v1.1.0
func IsBucketEmpty ¶
IsBucketEmpty is true if the bucket is empty.
func IsBucketNotFound ¶
IsBucketNotFound is true if the error indicates the bucket is not exists.
func IsDBClosed ¶
IsDBClosed is true if the error indicates the db was closed.
func IsKeyNotFound ¶
IsKeyNotFound is true if the error indicates the key is not found.
func IsMergeFile ¶ added in v1.1.0
func IsPrefixScan ¶
IsPrefixScan is true if prefix scanning not found the result.
func IsPrefixSearchScan ¶
IsPrefixSearchScan is true if prefix and search scanning not found the result.
func NewWatchManager ¶ added in v1.1.0
func NewWatchManager() *watchManager
Types ¶
type Bucket ¶ added in v1.0.0
type Bucket struct {
// Meta: the metadata for this bucket
Meta *BucketMeta
// Id: is the marker for this bucket, every bucket creation activity will generate a new Id for it.
// for example. If you have a bucket called "bucket_1", and you just delete bucket and create it again.
// the last bucket will have a different Id from the previous one.
Id BucketId
// Ds: the data structure for this bucket. (List, Set, SortSet, String)
Ds Ds
// Name: the name of this bucket.
Name string
}
Bucket is the disk structure of bucket
func (*Bucket) GetEntrySize ¶ added in v1.0.0
func (*Bucket) GetPayloadSize ¶ added in v1.0.0
type BucketManager ¶ added in v1.0.0
type BucketManager struct {
// BucketInfoMapper BucketID => Bucket itself
BucketInfoMapper InfoMapperInBucket
BucketIDMarker IDMarkerInBucket
// IDGenerator helps generates an ID for every single bucket
Gen *IDGenerator
// contains filtered or unexported fields
}
func NewBucketManager ¶ added in v1.0.0
func NewBucketManager(dir string) (*BucketManager, error)
func (*BucketManager) ExistBucket ¶ added in v1.0.0
func (bm *BucketManager) ExistBucket(ds Ds, name BucketName) bool
func (*BucketManager) GetBucket ¶ added in v1.0.0
func (bm *BucketManager) GetBucket(ds Ds, name BucketName) (b *Bucket, err error)
func (*BucketManager) GetBucketById ¶ added in v1.0.0
func (bm *BucketManager) GetBucketById(id BucketId) (*Bucket, error)
func (*BucketManager) GetBucketID ¶ added in v1.0.0
func (bm *BucketManager) GetBucketID(ds Ds, name BucketName) (BucketId, error)
func (*BucketManager) SubmitPendingBucketChange ¶ added in v1.0.0
func (bm *BucketManager) SubmitPendingBucketChange(reqs []*bucketSubmitRequest) error
type BucketMeta ¶
type BucketMeta struct {
Crc uint32
// Op: Mark the latest operation (e.g. delete, insert, update) for this bucket.
Op BucketOperation
// Size: the size of payload.
Size uint32
}
BucketMeta stores the Meta info of a Bucket. E.g. the size of bucket it store in disk.
func (*BucketMeta) Decode ¶ added in v1.0.0
func (meta *BucketMeta) Decode(bytes []byte)
Decode : CRC | op | size
type BucketName ¶ added in v1.0.0
type BucketName = string
type BucketOperation ¶ added in v1.0.0
type BucketOperation uint16
const ( BucketInsertOperation BucketOperation = 1 BucketUpdateOperation BucketOperation = 2 BucketDeleteOperation BucketOperation = 3 )
type BucketStatus ¶ added in v1.0.2
type BucketStatus = uint8
BucketStatus represents the current status of bucket in current Tx
type DB ¶
type DB struct {
Index *index
ActiveFile *DataFile
MaxFileID int64
KeyCount int // total key number ,include expired, deleted, repeated.
RecordCount int64 // current valid record count, exclude deleted, repeated
// contains filtered or unexported fields
}
DB represents a collection of buckets that persist on disk.
func (*DB) BackupTarGZ ¶
BackupTarGZ Backup copy the database to writer.
func (*DB) Begin ¶
Begin opens a new transaction. Multiple read-only transactions can be opened at the same time but there can only be one read/write transaction at a time. Attempting to open a read/write transactions while another one is in progress will result in blocking until the current read/write transaction is completed. All transactions must be closed by calling Commit() or Rollback() when done.
func (*DB) NewWriteBatch ¶ added in v0.13.1
func (db *DB) NewWriteBatch() (*WriteBatch, error)
func (*DB) Watch ¶ added in v1.1.0
func (db *DB) Watch(bucket string, key []byte, cb func(message *Message) error, opts ...WatchOptions) error
*
- Watch watches the key and bucket and calls the callback function for each message received.
- The callback will be called once for each individual message in the batch. *
- @param bucket - the bucket name to watch
- @param key - the key in the bucket to watch
- @param cb - the callback function to call for each message received
- @param opts - the options for the watch
- - CallbackTimeout - the timeout for the callback, default is 1 second *
- @return error - the error if the watch is stopped
type DataFile ¶
type DataFile struct {
ActualSize int64
// contains filtered or unexported fields
}
DataFile records about data file information.
func NewDataFile ¶
NewDataFile will return a new DataFile Object.
func (*DataFile) Close ¶
Close closes the RWManager. If RWManager is FileRWManager represents closes the File, rendering it unusable for I/O. If RWManager is a MMapRWManager represents Unmap deletes the memory mapped region, flushes any remaining changes.
func (*DataFile) ReadEntry ¶ added in v1.0.0
ReadEntry returns entry at the given off(offset). payloadSize = bucketSize + keySize + valueSize
type DataFlag ¶ added in v1.0.2
type DataFlag = uint16
DataFlag means the data operations have done by users.
const ( // DataDeleteFlag represents the data delete flag DataDeleteFlag DataFlag = 0 // DataSetFlag represents the data set flag DataSetFlag DataFlag = 1 // DataLPushFlag represents the data LPush flag DataLPushFlag DataFlag = 2 // DataRPushFlag represents the data RPush flag DataRPushFlag DataFlag = 3 // DataLRemFlag represents the data LRem flag DataLRemFlag DataFlag = 4 // DataLPopFlag represents the data LPop flag DataLPopFlag DataFlag = 5 // DataRPopFlag represents the data RPop flag DataRPopFlag DataFlag = 6 // DataLTrimFlag represents the data LTrim flag DataLTrimFlag DataFlag = 8 // DataZAddFlag represents the data ZAdd flag DataZAddFlag DataFlag = 9 // DataZRemFlag represents the data ZRem flag DataZRemFlag DataFlag = 10 // DataZRemRangeByRankFlag represents the data ZRemRangeByRank flag DataZRemRangeByRankFlag DataFlag = 11 // DataZPopMaxFlag represents the data ZPopMax flag DataZPopMaxFlag DataFlag = 12 // DataZPopMinFlag represents the data aZPopMin flag DataZPopMinFlag DataFlag = 13 // DataSetBucketDeleteFlag represents the delete Set bucket flag DataSetBucketDeleteFlag DataFlag = 14 // DataSortedSetBucketDeleteFlag represents the delete Sorted Set bucket flag DataSortedSetBucketDeleteFlag DataFlag = 15 // DataBTreeBucketDeleteFlag represents the delete BTree bucket flag DataBTreeBucketDeleteFlag DataFlag = 16 // DataListBucketDeleteFlag represents the delete List bucket flag DataListBucketDeleteFlag DataFlag = 17 // DataLRemByIndex represents the data LRemByIndex flag DataLRemByIndex DataFlag = 18 // DataExpireListFlag represents that set ttl for the list DataExpireListFlag DataFlag = 19 // DataBucketDeleteFlag represents the delete bucket flag // This is used for watch manager to delete the bucket when the bucket is deleted. DataBucketDeleteFlag DataFlag = 20 )
type DataStructure ¶ added in v1.0.2
type DataStructure = uint16
DataStructure represents the data structure we have already supported
const ( // DataStructureSet represents the data structure set flag DataStructureSet DataStructure = 0 // DataStructureSortedSet represents the data structure sorted set flag DataStructureSortedSet DataStructure = 1 // DataStructureBTree represents the data structure b tree flag DataStructureBTree DataStructure = 2 // DataStructureList represents the data structure list flag DataStructureList DataStructure = 3 )
type Entry ¶
Entry represents the data item.
func (*Entry) Encode ¶
Encode returns the slice after the entry be encoded.
the entry stored format: |----------------------------------------------------------------------------------------------------------| | crc | timestamp | ksz | valueSize | flag | TTL | status | ds | txId | bucketId | key | value | |----------------------------------------------------------------------------------------------------------| | uint32| uint64 |uint32 | uint32 | uint16 | uint32| uint16 | uint16 |uint64 | uint64 | []byte | []byte | |----------------------------------------------------------------------------------------------------------|
func (*Entry) GetTxIDBytes ¶ added in v0.12.4
GetTxIDBytes return the bytes of TxID
func (*Entry) IsBelongsToBPlusTree ¶ added in v1.0.2
IsBelongsToBPlusTree is kept for backward compatibility with legacy naming. Internally nutsdb uses a B+ tree implementation for primary indexes, so both helpers map to the same metadata flag.
func (*Entry) IsBelongsToBTree ¶ added in v1.1.0
func (*Entry) IsBelongsToList ¶ added in v1.0.2
func (*Entry) IsBelongsToSet ¶ added in v1.0.2
func (*Entry) IsBelongsToSortSet ¶ added in v1.0.2
func (*Entry) ParsePayload ¶
ParsePayload means this function will parse a byte array to bucket, key, size of an entry
type EntryIdxMode ¶
type EntryIdxMode int
EntryIdxMode represents entry index mode.
const ( // HintKeyValAndRAMIdxMode represents ram index (key and value) mode. HintKeyValAndRAMIdxMode EntryIdxMode = iota // HintKeyAndRAMIdxMode represents ram index (only key) mode. HintKeyAndRAMIdxMode )
type EntryStatus ¶ added in v1.0.3
type EntryStatus = uint8
EntryStatus represents the Entry status in the current Tx
const ( // NotFoundEntry means there is no changes for this entry in current Tx NotFoundEntry EntryStatus = 0 // EntryDeleted means this Entry has been deleted in the current Tx EntryDeleted EntryStatus = 1 // EntryUpdated means this Entry has been updated in the current Tx EntryUpdated EntryStatus = 2 )
type EntryWhenRecovery ¶ added in v0.14.0
type EntryWhenRecovery struct {
Entry
// contains filtered or unexported fields
}
type ErrorHandler ¶ added in v0.13.0
type ErrorHandler interface {
HandleError(err error)
}
An ErrorHandler handles an error occurred during transaction.
type ErrorHandlerFunc ¶ added in v0.13.0
type ErrorHandlerFunc func(err error)
The ErrorHandlerFunc type is an adapter to ErrorHandler.
func (ErrorHandlerFunc) HandleError ¶ added in v0.13.0
func (fn ErrorHandlerFunc) HandleError(err error)
type ExpiredDeleteType ¶ added in v0.14.0
type ExpiredDeleteType uint8
const ( // TimeWheel represents use time wheel to do expired deletion TimeWheel ExpiredDeleteType = iota // TimeHeap represents use time heap to do expired deletion TimeHeap )
type FileManager ¶ added in v1.1.0
type FileManager struct {
// contains filtered or unexported fields
}
FileManager holds the fd cache and file-related operations go through the manager to obtain the file processing object
func NewFileManager ¶ added in v1.1.0
func NewFileManager(rwMode RWMode, maxFdNums int, cleanThreshold float64, segmentSize int64) (fm *FileManager)
NewFileManager will create a NewFileManager object
func (*FileManager) Close ¶ added in v1.1.0
func (fm *FileManager) Close() error
Close will Close fdm resource
func (*FileManager) GetDataFile ¶ added in v1.1.0
func (fm *FileManager) GetDataFile(path string, capacity int64) (datafile *DataFile, err error)
GetDataFile will return a DataFile Object
func (*FileManager) GetDataFileByID ¶ added in v1.1.0
func (*FileManager) GetDataFileReadOnly ¶ added in v1.1.0
func (fm *FileManager) GetDataFileReadOnly(path string, capacity int64) (datafile *DataFile, err error)
GetDataFileReadOnly will return a DataFile Object for read-only operations This method skips file truncation to improve read performance
func (*FileManager) GetFileRWManager ¶ added in v1.1.0
func (fm *FileManager) GetFileRWManager(path string, capacity int64, segmentSize int64, readOnly bool) (*fileio.FileIORWManager, error)
GetFileRWManager will return a FileIORWManager Object
func (*FileManager) GetMMapRWManager ¶ added in v1.1.0
func (fm *FileManager) GetMMapRWManager(path string, capacity int64, segmentSize int64, readOnly bool) (*fileio.MMapRWManager, error)
GetMMapRWManager will return a MMapRWManager Object
type GetByScoreRangeOptions ¶ added in v0.14.0
type GetByScoreRangeOptions struct {
Limit int // limit the max nodes to return
ExcludeStart bool // exclude start value, so it search in interval (start, end] or (start, end)
ExcludeEnd bool // exclude end value, so it search in interval [start, end) or (start, end)
}
GetByScoreRangeOptions represents the options of the GetByScoreRange function.
type HintCollector ¶ added in v1.1.0
type HintCollector struct {
// contains filtered or unexported fields
}
func NewHintCollector ¶ added in v1.1.0
func NewHintCollector(fileID int64, writer hintWriter, flushEvery int) *HintCollector
func (*HintCollector) Add ¶ added in v1.1.0
func (hc *HintCollector) Add(entry *HintEntry) error
func (*HintCollector) Close ¶ added in v1.1.0
func (hc *HintCollector) Close() error
func (*HintCollector) Flush ¶ added in v1.1.0
func (hc *HintCollector) Flush() error
func (*HintCollector) Sync ¶ added in v1.1.0
func (hc *HintCollector) Sync() error
type HintEntry ¶ added in v1.1.0
type HintEntry struct {
BucketId uint64
KeySize uint32
ValueSize uint32
Timestamp uint64
TTL uint32
Flag uint16
Status uint16
Ds uint16
DataPos uint64
FileID int64
Key []byte
}
HintEntry represents an entry in the hint file
type HintFileReader ¶ added in v1.1.0
type HintFileReader struct {
// contains filtered or unexported fields
}
HintFileReader is used to read hint files
func (*HintFileReader) Close ¶ added in v1.1.0
func (r *HintFileReader) Close() error
Close closes the hint file
func (*HintFileReader) Open ¶ added in v1.1.0
func (r *HintFileReader) Open(path string) error
Open opens a hint file for reading
func (*HintFileReader) Read ¶ added in v1.1.0
func (r *HintFileReader) Read() (*HintEntry, error)
Read reads a hint entry from the file
type HintFileWriter ¶ added in v1.1.0
type HintFileWriter struct {
// contains filtered or unexported fields
}
HintFileWriter is used to write hint files
func (*HintFileWriter) Close ¶ added in v1.1.0
func (w *HintFileWriter) Close() error
Close closes the hint file
func (*HintFileWriter) Create ¶ added in v1.1.0
func (w *HintFileWriter) Create(path string) error
Create creates a hint file for writing
func (*HintFileWriter) Sync ¶ added in v1.1.0
func (w *HintFileWriter) Sync() error
Sync flushes the buffer and syncs the file to disk
func (*HintFileWriter) Write ¶ added in v1.1.0
func (w *HintFileWriter) Write(entry *HintEntry) error
Write writes a hint entry to the file
type IDGenerator ¶ added in v1.0.0
type IDGenerator struct {
// contains filtered or unexported fields
}
func (*IDGenerator) CompareAndSetMaxId ¶ added in v1.1.0
func (g *IDGenerator) CompareAndSetMaxId(id uint64)
func (*IDGenerator) GenId ¶ added in v1.0.0
func (g *IDGenerator) GenId() uint64
type IDMarkerInBucket ¶ added in v1.0.2
type IDMarkerInBucket map[BucketName]map[Ds]BucketId
type InfoMapperInBucket ¶ added in v1.0.2
type Iterator ¶
type Iterator struct {
// contains filtered or unexported fields
}
func NewIterator ¶
func NewIterator(tx *Tx, bucket string, options IteratorOptions) *Iterator
Returns a new iterator. The Release method must be called when finished with the iterator.
type IteratorOptions ¶
type IteratorOptions struct {
Reverse bool
}
type ListImplementationType ¶ added in v1.1.0
type ListImplementationType data.ListImplementationType
ListImplementationType defines the implementation type for List data structure.
type Message ¶ added in v1.1.0
type Message struct {
BucketName BucketName
Key string
Value []byte
Flag DataFlag
Timestamp uint64
// contains filtered or unexported fields
}
func NewMessage ¶ added in v1.1.0
func NewMessage(bucketName BucketName, key string, value []byte, flag DataFlag, timestamp uint64, options ...MessageOptions) *Message
type MessageOptions ¶ added in v1.1.0
type MessageOptions struct {
Priority MessagePriority
}
type MessagePriority ¶ added in v1.1.0
type MessagePriority int
type MetaData ¶
type MetaData struct {
KeySize uint32
ValueSize uint32
Timestamp uint64
TTL uint32
Flag DataFlag // delete / set
BucketSize uint32
TxID uint64
Status DataStatus // committed / uncommitted
Ds DataStructure // data structure
Crc uint32
BucketId BucketId
}
func NewMetaData ¶ added in v0.12.6
func NewMetaData() *MetaData
func (*MetaData) PayloadSize ¶
func (*MetaData) WithBucketId ¶ added in v1.0.0
func (*MetaData) WithBucketSize ¶ added in v0.12.6
func (*MetaData) WithKeySize ¶ added in v0.12.6
func (*MetaData) WithStatus ¶ added in v0.12.6
func (*MetaData) WithTimeStamp ¶ added in v0.12.6
func (*MetaData) WithValueSize ¶ added in v0.12.6
type Option ¶
type Option func(*Options)
func WithCommitBufferSize ¶ added in v0.13.0
func WithEnableHintFile ¶ added in v1.1.0
func WithEnableMergeV2 ¶ added in v1.1.0
func WithEntryIdxMode ¶
func WithEntryIdxMode(entryIdxMode EntryIdxMode) Option
func WithErrorHandler ¶ added in v0.13.0
func WithErrorHandler(errorHandler ErrorHandler) Option
func WithGCWhenClose ¶ added in v0.12.4
func WithHintKeyAndRAMIdxCacheSize ¶ added in v1.0.0
func WithLessFunc ¶ added in v0.13.0
func WithListImpl ¶ added in v1.1.0
func WithListImpl(implType ListImplementationType) Option
func WithMaxBatchCount ¶ added in v0.13.1
func WithMaxBatchSize ¶ added in v0.13.1
func WithMaxFdNumsInCache ¶
func WithMaxWriteRecordCount ¶ added in v0.14.1
func WithNodeNum ¶
func WithRWMode ¶
func WithSegmentSize ¶
func WithSyncEnable ¶
type Options ¶
type Options struct {
// Dir represents Open the database located in which dir.
Dir string
// EntryIdxMode represents using which mode to index the entries.
EntryIdxMode EntryIdxMode
// RWMode represents the read and write mode.
// RWMode includes two options: FileIO and MMap.
// FileIO represents the read and write mode using standard I/O.
// MMap represents the read and write mode using mmap.
RWMode RWMode
SegmentSize int64
// NodeNum represents the node number.
// Default NodeNum is 1. NodeNum range [1,1023].
NodeNum int64
// SyncEnable represents if call Sync() function.
// if SyncEnable is false, high write performance but potential data loss likely.
// if SyncEnable is true, slower but persistent.
SyncEnable bool
// MaxFdNumsInCache represents the max numbers of fd in cache.
MaxFdNumsInCache int
// CleanFdsCacheThreshold represents the maximum threshold for recycling fd, it should be between 0 and 1.
CleanFdsCacheThreshold float64
// BufferSizeOfRecovery represents the buffer size of recoveryReader buffer Size
BufferSizeOfRecovery int
// GcWhenClose represent initiative GC when calling db.Close()
GCWhenClose bool
// CommitBufferSize represent allocated memory for tx
CommitBufferSize int64
// ErrorHandler handles an error occurred during transaction.
// Example:
// func triggerAlertError(err error) {
// if errors.Is(err, targetErr) {
// alertManager.TriggerAlert()
// }
// })
ErrorHandler ErrorHandler
// LessFunc is a function that sorts keys.
LessFunc LessFunc
// MergeInterval represent the interval for automatic merges, with 0 meaning automatic merging is disabled.
MergeInterval time.Duration
// MaxBatchCount represents max entries in batch
MaxBatchCount int64
// MaxBatchSize represents max batch size in bytes
MaxBatchSize int64
// ExpiredDeleteType represents the data structure used for expired deletion
// TimeWheel means use the time wheel, You can use it when you need high performance or low memory usage
// TimeHeap means use the time heap, You can use it when you need to delete precisely or memory usage will be high
ExpiredDeleteType ExpiredDeleteType
// max write record num
MaxWriteRecordCount int64
// cache size for HintKeyAndRAMIdxMode
HintKeyAndRAMIdxCacheSize int
// EnableHintFile represents if enable hint file feature.
// If EnableHintFile is true, hint files will be created and used for faster database startup.
// If EnableHintFile is false, hint files will not be created or used.
EnableHintFile bool
// EnableMergeV2 toggles the redesigned merge pipeline with deterministic merge files and manifest support.
// When disabled, NutsDB falls back to the legacy merge logic.
EnableMergeV2 bool
// ListImpl specifies the implementation type for List data structure.
// Default: ListImplDoublyLinkedList (maintains backward compatibility)
ListImpl ListImplementationType
// EnableWatch toggles the watch feature.
// If EnableWatch is true, the watch feature will be enabled. The watch feature will be disabled by default.
EnableWatch bool
}
Options records params for creating DB object.
type SkipList ¶ added in v0.14.0
type SkipList struct {
// contains filtered or unexported fields
}
The SkipList represents the sorted set.
func (*SkipList) FindRank ¶ added in v0.14.0
FindRank Returns the rank of member in the sorted set stored at key, with the scores ordered from low to high. Note that the rank is 1-based integer. Rank 1 means the first node If the node is not found, 0 is returned. Otherwise rank(> 0) is returned.
Time complexity of this method is : O(log(N)).
func (*SkipList) FindRevRank ¶ added in v0.14.0
FindRevRank Returns the rank of member in the sorted set stored at key, with the scores ordered from high to low.
func (*SkipList) GetByRank ¶ added in v0.14.0
func (sl *SkipList) GetByRank(rank int, remove bool) *SkipListNode
GetByRank returns the node at given rank. Note that the rank is 1-based integer. Rank 1 means the first node; Rank -1 means the last node. If remove is true, the returned nodes are removed If node is not found at specific rank, nil is returned.
Time complexity of this method is : O(log(N)).
func (*SkipList) GetByRankRange ¶ added in v0.14.0
func (sl *SkipList) GetByRankRange(start, end int, remove bool) []*SkipListNode
GetByRankRange returns nodes within specific rank range [start, end]. Note that the rank is 1-based integer. Rank 1 means the first node; Rank -1 means the last node If start is greater than end, the returned array is in reserved order If remove is true, the returned nodes are removed.
Time complexity of this method is : O(log(N)).
func (*SkipList) GetByScoreRange ¶ added in v0.14.0
func (sl *SkipList) GetByScoreRange(start SCORE, end SCORE, options *GetByScoreRangeOptions) []*SkipListNode
GetByScoreRange returns the nodes whose score within the specific range. If options is nil, it searches in interval [start, end] without any limit by default.
Time complexity of this method is : O(log(N)).
func (*SkipList) GetByValue ¶ added in v0.14.0
func (sl *SkipList) GetByValue(value []byte) *SkipListNode
GetByValue returns the node at given key. If node is not found, nil is returned
Time complexity : O(1).
func (*SkipList) PeekMax ¶ added in v0.14.0
func (sl *SkipList) PeekMax() *SkipListNode
PeekMax returns the element with maximum score, nil if the set is empty.
Time Complexity : O(1).
func (*SkipList) PeekMin ¶ added in v0.14.0
func (sl *SkipList) PeekMin() *SkipListNode
PeekMin returns the element with minimum score, nil if the set is empty.
Time complexity of this method is : O(log(N)).
func (*SkipList) PopMax ¶ added in v0.14.0
func (sl *SkipList) PopMax() *SkipListNode
PopMax returns and remove the element with maximum score, nil if the set is empty.
Time complexity of this method is : O(log(N)).
func (*SkipList) PopMin ¶ added in v0.14.0
func (sl *SkipList) PopMin() *SkipListNode
PopMin returns and remove the element with minimal score, nil if the set is empty.
Time complexity of this method is : O(log(N)).
func (*SkipList) Put ¶ added in v0.14.0
Put puts an element into the sorted set with specific key / value / score.
Time complexity of this method is : O(log(N)).
func (*SkipList) Remove ¶ added in v0.14.0
func (sl *SkipList) Remove(hash uint32) *SkipListNode
Remove removes element specified at given key.
Time complexity of this method is : O(log(N)).
type SkipListLevel ¶ added in v0.14.0
type SkipListLevel struct {
// contains filtered or unexported fields
}
SkipListLevel records forward and span.
type SkipListNode ¶ added in v0.14.0
type SkipListNode struct {
// contains filtered or unexported fields
}
SkipListNode represents a node in the SkipList.
func (*SkipListNode) Hash ¶ added in v0.14.0
func (sln *SkipListNode) Hash() uint32
Hash returns the key of the node.
func (*SkipListNode) Score ¶ added in v0.14.0
func (sln *SkipListNode) Score() SCORE
Score returns the score of the node.
type SnowflakeManager ¶ added in v1.1.0
type SnowflakeManager struct {
// contains filtered or unexported fields
}
SnowflakeManager manages snowflake node initialization and caching
func NewSnowflakeManager ¶ added in v1.1.0
func NewSnowflakeManager(nodeNum int64) *SnowflakeManager
NewSnowflakeManager creates a new SnowflakeManager with the given node number
func (*SnowflakeManager) GetNode ¶ added in v1.1.0
func (sm *SnowflakeManager) GetNode() *snowflake.Node
GetNode returns the snowflake node, initializing it once. If initialization fails, it will fatal the program.
type SortedSet ¶ added in v0.14.0
func NewSortedSet ¶ added in v0.14.0
func (*SortedSet) ZRangeByRank ¶ added in v0.14.0
func (*SortedSet) ZRangeByScore ¶ added in v0.14.0
func (*SortedSet) ZRemRangeByRank ¶ added in v0.14.0
type SortedSetIdx ¶
type SortedSetIdx struct {
// contains filtered or unexported fields
}
type SortedSetMember ¶ added in v0.14.0
type Throttle ¶ added in v0.13.1
type Throttle struct {
// contains filtered or unexported fields
}
Throttle allows a limited number of workers to run at a time. It also provides a mechanism to check for errors encountered by workers and wait for them to finish.
func NewThrottle ¶ added in v0.13.1
NewThrottle creates a new throttle with a max number of workers.
func (*Throttle) Do ¶ added in v0.13.1
Do should be called by workers before they start working. It blocks if there are already maximum number of workers working. If it detects an error from previously Done workers, it would return it.
func (*Throttle) Done ¶ added in v0.13.1
Done should be called by workers when they finish working. They can also pass the error status of work done.
type Tx ¶
type Tx struct {
// contains filtered or unexported fields
}
Tx represents a transaction.
func (*Tx) Commit ¶
Commit commits the transaction, following these steps:
1. check the length of pendingWrites.If there are no writes, return immediately.
2. check if the ActiveFile has not enough space to store entry. if not, call rotateActiveFile function.
3. write pendingWrites to disk, if a non-nil error,return the error.
4. build Hint index.
5. send updated entries to watch manager if watch feature is enabled.
6. Unlock the database and clear the db field.
func (*Tx) CommitWith ¶ added in v0.13.1
func (*Tx) DeleteBucket ¶
DeleteBucket delete bucket depends on ds (represents the data structure)
func (*Tx) Get ¶
Get retrieves the value for a key in the bucket. The returned value is only valid for the life of the transaction.
func (*Tx) GetListTTL ¶ added in v0.12.1
func (*Tx) GetTTL ¶ added in v1.0.3
GetTTL returns remaining TTL of a value by key. It returns (-1, nil) If TTL is Persistent (0, ErrBucketNotFound|ErrKeyNotFound) If expired or not found (TTL, nil) If the record exists with a TTL Note: The returned remaining TTL will be in seconds. For example, remainingTTL is 500ms, It'll return 0.
func (*Tx) Has ¶ added in v1.1.0
Has returns true if the record exists. It checks without retrieving the value from disk making lookups significantly faster while keeping memory usage down as well. It does require the `HintKeyAndRAMIdxMode` option to be enabled to function as described.
func (*Tx) IterateBuckets ¶
IterateBuckets iterate over all the bucket depends on ds (represents the data structure)
func (*Tx) LPeek ¶
LPeek returns the first element of the list stored in the bucket at given bucket and key.
func (*Tx) LPop ¶
LPop removes and returns the first element of the list stored in the bucket at given bucket and key.
func (*Tx) LPush ¶
LPush inserts the values at the head of the list stored in the bucket at given bucket,key and values.
func (*Tx) LRange ¶
LRange returns the specified elements of the list stored in the bucket at given bucket,key, start and end. The offsets start and stop are zero-based indexes 0 being the first element of the list (the head of the list), 1 being the next element and so on. Start and end can also be negative numbers indicating offsets from the end of the list, where -1 is the last element of the list, -2 the penultimate element and so on.
func (*Tx) LRem ¶
LRem removes the first count occurrences of elements equal to value from the list stored in the bucket at given bucket,key,count. The count argument influences the operation in the following ways: count > 0: Remove elements equal to value moving from head to tail. count < 0: Remove elements equal to value moving from tail to head. count = 0: Remove all elements equal to value.
func (*Tx) LRemByIndex ¶
LRemByIndex remove the list element at specified index
func (*Tx) LSize ¶
LSize returns the size of key in the bucket in the bucket at given bucket and key.
func (*Tx) LTrim ¶
LTrim trims an existing list so that it will contain only the specified range of elements specified. the offsets start and stop are zero-based indexes 0 being the first element of the list (the head of the list), 1 being the next element and so on. start and end can also be negative numbers indicating offsets from the end of the list, where -1 is the last element of the list, -2 the penultimate element and so on.
func (*Tx) NewKVBucket ¶ added in v1.0.0
func (*Tx) NewListBucket ¶ added in v1.0.0
func (*Tx) NewSetBucket ¶ added in v1.0.0
func (*Tx) NewSortSetBucket ¶ added in v1.0.0
func (*Tx) Persist ¶ added in v1.0.3
Persist updates record's TTL as Persistent if the record exists.
func (*Tx) PrefixScan ¶
func (tx *Tx) PrefixScan(bucket string, prefix []byte, offsetNum int, limitNum int) (values [][]byte, err error)
PrefixScan iterates over a key prefix at given bucket, prefix and limitNum. LimitNum will limit the number of entries return.
func (*Tx) PrefixScanEntries ¶ added in v1.1.0
func (tx *Tx) PrefixScanEntries(bucket string, prefix []byte, reg string, offsetNum int, limitNum int, includeKeys, includeValues bool) (keys, values [][]byte, err error)
PrefixScanEntries iterates over a key prefix at given bucket, prefix and limitNum. If reg is set a regular expression will be used to filter the found entries. LimitNum will limit the number of entries return. It will return keys and/or values based on the includeKeys and includeValues flags.
func (*Tx) PrefixSearchScan ¶
func (tx *Tx) PrefixSearchScan(bucket string, prefix []byte, reg string, offsetNum int, limitNum int) (values [][]byte, err error)
PrefixSearchScan iterates over a key prefix at given bucket, prefix, match regular expression and limitNum. LimitNum will limit the number of entries return.
func (*Tx) PutIfExists ¶ added in v1.0.2
PutIfExists set the value for a key in the bucket only if the key already exits.
func (*Tx) PutIfNotExists ¶ added in v1.0.2
PutIfNotExists set the value for a key in the bucket only if the key doesn't exist already.
func (*Tx) PutWithTimestamp ¶
func (*Tx) RPeek ¶
RPeek returns the last element of the list stored in the bucket at given bucket and key.
func (*Tx) RPop ¶
RPop removes and returns the last element of the list stored in the bucket at given bucket and key.
func (*Tx) RPush ¶
RPush inserts the values at the tail of the list stored in the bucket at given bucket,key and values.
func (*Tx) RangeScanEntries ¶ added in v1.1.0
func (tx *Tx) RangeScanEntries(bucket string, start, end []byte, includeKeys, includeValues bool) (keys, values [][]byte, err error)
RangeScanEntries query a range at given bucket, start and end slice. It will return keys and/or values based on the includeKeys and includeValues flags.
func (*Tx) SAdd ¶
SAdd adds the specified members to the set stored int the bucket at given bucket,key and items.
func (*Tx) SAreMembers ¶
SAreMembers returns if the specified members are the member of the set int the bucket at given bucket,key and items.
func (*Tx) SCard ¶
SCard returns the set cardinality (number of elements) of the set stored in the bucket at given bucket and key.
func (*Tx) SDiffByOneBucket ¶
SDiffByOneBucket returns the members of the set resulting from the difference between the first set and all the successive sets in one bucket.
func (*Tx) SDiffByTwoBuckets ¶
func (tx *Tx) SDiffByTwoBuckets(bucket1 string, key1 []byte, bucket2 string, key2 []byte) ([][]byte, error)
SDiffByTwoBuckets returns the members of the set resulting from the difference between the first set and all the successive sets in two buckets.
func (*Tx) SIsMember ¶
SIsMember returns if member is a member of the set stored int the bucket at given bucket,key and item.
func (*Tx) SMembers ¶
SMembers returns all the members of the set value stored int the bucket at given bucket and key.
func (*Tx) SMoveByOneBucket ¶
SMoveByOneBucket moves member from the set at source to the set at destination in one bucket.
func (*Tx) SMoveByTwoBuckets ¶
func (tx *Tx) SMoveByTwoBuckets(bucket1 string, key1 []byte, bucket2 string, key2, item []byte) (bool, error)
SMoveByTwoBuckets moves member from the set at source to the set at destination in two buckets.
func (*Tx) SPop ¶
SPop removes and returns one or more random elements from the set value store in the bucket at given bucket and key.
func (*Tx) SRem ¶
SRem removes the specified members from the set stored int the bucket at given bucket,key and items.
func (*Tx) SUnionByOneBucket ¶
SUnionByOneBucket the members of the set resulting from the union of all the given sets in one bucket.
func (*Tx) SUnionByTwoBuckets ¶
func (tx *Tx) SUnionByTwoBuckets(bucket1 string, key1 []byte, bucket2 string, key2 []byte) ([][]byte, error)
SUnionByTwoBuckets the members of the set resulting from the union of all the given sets in two buckets.
func (*Tx) SubmitBucket ¶ added in v1.0.0
func (*Tx) ZAdd ¶
ZAdd Adds the specified member with the specified score into the sorted set specified by key in a bucket.
func (*Tx) ZCard ¶
ZCard Returns the sorted set cardinality (number of elements) of the sorted set specified by key in a bucket.
func (*Tx) ZCount ¶
func (tx *Tx) ZCount(bucket string, key []byte, start, end float64, opts *GetByScoreRangeOptions) (int, error)
ZCount Returns the number of elements in the sorted set specified by key in a bucket with a score between min and max and opts. Opt includes the following parameters: Limit int // limit the max nodes to return ExcludeStart bool // exclude start value, so it search in interval (start, end] or (start, end) ExcludeEnd bool // exclude end value, so it search in interval [start, end) or (start, end)
func (*Tx) ZMembers ¶
func (tx *Tx) ZMembers(bucket string, key []byte) (map[*SortedSetMember]struct{}, error)
ZMembers Returns all the members and scores of members of the set specified by key in a bucket.
func (*Tx) ZPeekMax ¶
func (tx *Tx) ZPeekMax(bucket string, key []byte) (*SortedSetMember, error)
ZPeekMax Returns the member with the highest score in the sorted set specified by key in a bucket.
func (*Tx) ZPeekMin ¶
func (tx *Tx) ZPeekMin(bucket string, key []byte) (*SortedSetMember, error)
ZPeekMin Returns the member with the lowest score in the sorted set specified by key in a bucket.
func (*Tx) ZPopMax ¶
func (tx *Tx) ZPopMax(bucket string, key []byte) (*SortedSetMember, error)
ZPopMax Removes and returns the member with the highest score in the sorted set specified by key in a bucket.
func (*Tx) ZPopMin ¶
func (tx *Tx) ZPopMin(bucket string, key []byte) (*SortedSetMember, error)
ZPopMin Removes and returns the member with the lowest score in the sorted set specified by key in a bucket.
func (*Tx) ZRangeByRank ¶
ZRangeByRank Returns all the elements in the sorted set specified by key in a bucket with a rank between start and end (including elements with rank equal to start or end).
func (*Tx) ZRangeByScore ¶
func (tx *Tx) ZRangeByScore(bucket string, key []byte, start, end float64, opts *GetByScoreRangeOptions) ([]*SortedSetMember, error)
ZRangeByScore Returns all the elements in the sorted set specified by key in a bucket with a score between min and max. And the parameter `Opts` is the same as ZCount's.
func (*Tx) ZRank ¶
ZRank Returns the rank of member in the sorted set specified by key in a bucket, with the scores ordered from low to high.
func (*Tx) ZRem ¶
ZRem removes the specified members from the sorted set stored in one bucket at given bucket and key.
func (*Tx) ZRemRangeByRank ¶
ZRemRangeByRank removes all elements in the sorted set stored in one bucket at given bucket with rank between start and end. the rank is 1-based integer. Rank 1 means the first node; Rank -1 means the last node.
type WatchOptions ¶ added in v1.1.0
func NewWatchOptions ¶ added in v1.1.0
func NewWatchOptions() *WatchOptions
func (*WatchOptions) WithCallbackTimeout ¶ added in v1.1.0
func (opts *WatchOptions) WithCallbackTimeout(timeout time.Duration)
WithCallbackTimeout sets the callback timeout
type WriteBatch ¶ added in v0.13.1
WriteBatch holds the necessary info to perform batched writes.
func (*WriteBatch) Cancel ¶ added in v0.13.1
func (wb *WriteBatch) Cancel() error
func (*WriteBatch) Delete ¶ added in v0.13.1
func (wb *WriteBatch) Delete(bucket string, key []byte) error
func (tx *Tx) Delete(bucket string, key []byte) error
func (*WriteBatch) Error ¶ added in v0.13.1
func (wb *WriteBatch) Error() error
Error returns any errors encountered so far. No commits would be run once an error is detected.
func (*WriteBatch) Flush ¶ added in v0.13.1
func (wb *WriteBatch) Flush() error
func (*WriteBatch) Put ¶ added in v0.13.1
func (wb *WriteBatch) Put(bucket string, key, value []byte, ttl uint32) error
func (*WriteBatch) Reset ¶ added in v0.13.1
func (wb *WriteBatch) Reset() error
func (*WriteBatch) SetMaxPendingTxns ¶ added in v0.13.1
func (wb *WriteBatch) SetMaxPendingTxns(max int)
SetMaxPendingTxns sets a limit on maximum number of pending transactions while writing batches. This function should be called before using WriteBatch. Default value of MaxPendingTxns is 16 to minimise memory usage.
Source Files
¶
- batch.go
- bucket.go
- bucket_manager.go
- const.go
- datafile.go
- db.go
- db_error.go
- doc.go
- entry.go
- errors.go
- file_manager.go
- hint_collector.go
- hintfile.go
- index.go
- iterator.go
- merge.go
- merge_manifest.go
- merge_recovery.go
- merge_utils.go
- merge_v2.go
- metadata.go
- options.go
- pending.go
- recovery_reader.go
- sorted_set.go
- throttle.go
- ttl_manager.go
- tx.go
- tx_btree.go
- tx_bucket.go
- tx_error.go
- tx_list.go
- tx_set.go
- tx_zset.go
- utils.go
- value.go
- watch_manager.go
Directories
¶
| Path | Synopsis |
|---|---|
|
examples
|
|
|
basic
command
|
|
|
batch/concurrence
command
|
|
|
batch/put
command
|
|
|
batch/read
command
|
|
|
bucket
command
|
|
|
emptybucket
command
|
|
|
http
command
|
|
|
iterator
command
|
|
|
k-v/append
command
|
|
|
k-v/bit
command
|
|
|
k-v/get_range
command
|
|
|
k-v/increments
command
|
|
|
k-v/multioprations
command
|
|
|
list
command
|
|
|
set
command
|
|
|
sortedSet
command
|
|
|
watcher
command
|
|
|
internal
|
|
