summaryrefslogtreecommitdiff
path: root/vendor/github.com/dgraph-io/badger/options.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/dgraph-io/badger/options.go')
-rw-r--r--vendor/github.com/dgraph-io/badger/options.go420
1 files changed, 420 insertions, 0 deletions
diff --git a/vendor/github.com/dgraph-io/badger/options.go b/vendor/github.com/dgraph-io/badger/options.go
new file mode 100644
index 0000000..f396c7e
--- /dev/null
+++ b/vendor/github.com/dgraph-io/badger/options.go
@@ -0,0 +1,420 @@
+/*
+ * Copyright 2017 Dgraph Labs, Inc. and Contributors
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package badger
+
+import (
+ "github.com/dgraph-io/badger/options"
+)
+
+// Note: If you add a new option X make sure you also add a WithX method on Options.
+
+// Options are params for creating DB object.
+//
+// This package provides DefaultOptions which contains options that should
+// work for most applications. Consider using that as a starting point before
+// customizing it for your own needs.
+//
+// Each option X is documented on the WithX method.
+type Options struct {
+ // Required options.
+
+ Dir string
+ ValueDir string
+
+ // Usually modified options.
+
+ SyncWrites bool
+ TableLoadingMode options.FileLoadingMode
+ ValueLogLoadingMode options.FileLoadingMode
+ NumVersionsToKeep int
+ ReadOnly bool
+ Truncate bool
+ Logger Logger
+ EventLogging bool
+
+ // Fine tuning options.
+
+ MaxTableSize int64
+ LevelSizeMultiplier int
+ MaxLevels int
+ ValueThreshold int
+ NumMemtables int
+
+ NumLevelZeroTables int
+ NumLevelZeroTablesStall int
+
+ LevelOneSize int64
+ ValueLogFileSize int64
+ ValueLogMaxEntries uint32
+
+ NumCompactors int
+ CompactL0OnClose bool
+ LogRotatesToFlush int32
+ // When set, checksum will be validated for each entry read from the value log file.
+ VerifyValueChecksum bool
+
+ // BypassLockGaurd will bypass the lock guard on badger. Bypassing lock
+ // guard can cause data corruption if multiple badger instances are using
+ // the same directory. Use this options with caution.
+ BypassLockGuard bool
+
+ // Transaction start and commit timestamps are managed by end-user.
+ // This is only useful for databases built on top of Badger (like Dgraph).
+ // Not recommended for most users.
+ managedTxns bool
+
+ // 4. Flags for testing purposes
+ // ------------------------------
+ maxBatchCount int64 // max entries in batch
+ maxBatchSize int64 // max batch size in bytes
+
+}
+
+// DefaultOptions sets a list of recommended options for good performance.
+// Feel free to modify these to suit your needs with the WithX methods.
+func DefaultOptions(path string) Options {
+ return Options{
+ Dir: path,
+ ValueDir: path,
+ LevelOneSize: 256 << 20,
+ LevelSizeMultiplier: 10,
+ TableLoadingMode: options.MemoryMap,
+ ValueLogLoadingMode: options.MemoryMap,
+ // table.MemoryMap to mmap() the tables.
+ // table.Nothing to not preload the tables.
+ MaxLevels: 7,
+ MaxTableSize: 64 << 20,
+ NumCompactors: 2, // Compactions can be expensive. Only run 2.
+ NumLevelZeroTables: 5,
+ NumLevelZeroTablesStall: 10,
+ NumMemtables: 5,
+ SyncWrites: true,
+ NumVersionsToKeep: 1,
+ CompactL0OnClose: true,
+ VerifyValueChecksum: false,
+ // Nothing to read/write value log using standard File I/O
+ // MemoryMap to mmap() the value log files
+ // (2^30 - 1)*2 when mmapping < 2^31 - 1, max int32.
+ // -1 so 2*ValueLogFileSize won't overflow on 32-bit systems.
+ ValueLogFileSize: 1<<30 - 1,
+
+ ValueLogMaxEntries: 1000000,
+ ValueThreshold: 32,
+ Truncate: false,
+ Logger: defaultLogger,
+ EventLogging: true,
+ LogRotatesToFlush: 2,
+ }
+}
+
+// LSMOnlyOptions follows from DefaultOptions, but sets a higher ValueThreshold
+// so values would be colocated with the LSM tree, with value log largely acting
+// as a write-ahead log only. These options would reduce the disk usage of value
+// log, and make Badger act more like a typical LSM tree.
+func LSMOnlyOptions(path string) Options {
+ // Max value length which fits in uint16.
+ // Let's not set any other options, because they can cause issues with the
+ // size of key-value a user can pass to Badger. For e.g., if we set
+ // ValueLogFileSize to 64MB, a user can't pass a value more than that.
+ // Setting it to ValueLogMaxEntries to 1000, can generate too many files.
+ // These options are better configured on a usage basis, than broadly here.
+ // The ValueThreshold is the most important setting a user needs to do to
+ // achieve a heavier usage of LSM tree.
+ // NOTE: If a user does not want to set 64KB as the ValueThreshold because
+ // of performance reasons, 1KB would be a good option too, allowing
+ // values smaller than 1KB to be colocated with the keys in the LSM tree.
+ return DefaultOptions(path).WithValueThreshold(65500)
+}
+
+// WithDir returns a new Options value with Dir set to the given value.
+//
+// Dir is the path of the directory where key data will be stored in.
+// If it doesn't exist, Badger will try to create it for you.
+// This is set automatically to be the path given to `DefaultOptions`.
+func (opt Options) WithDir(val string) Options {
+ opt.Dir = val
+ return opt
+}
+
+// WithValueDir returns a new Options value with ValueDir set to the given value.
+//
+// ValueDir is the path of the directory where value data will be stored in.
+// If it doesn't exist, Badger will try to create it for you.
+// This is set automatically to be the path given to `DefaultOptions`.
+func (opt Options) WithValueDir(val string) Options {
+ opt.ValueDir = val
+ return opt
+}
+
+// WithSyncWrites returns a new Options value with SyncWrites set to the given value.
+//
+// When SyncWrites is true all writes are synced to disk. Setting this to false would achieve better
+// performance, but may cause data loss in case of crash.
+//
+// The default value of SyncWrites is true.
+func (opt Options) WithSyncWrites(val bool) Options {
+ opt.SyncWrites = val
+ return opt
+}
+
+// WithTableLoadingMode returns a new Options value with TableLoadingMode set to the given value.
+//
+// TableLoadingMode indicates which file loading mode should be used for the LSM tree data files.
+//
+// The default value of TableLoadingMode is options.MemoryMap.
+func (opt Options) WithTableLoadingMode(val options.FileLoadingMode) Options {
+ opt.TableLoadingMode = val
+ return opt
+}
+
+// WithValueLogLoadingMode returns a new Options value with ValueLogLoadingMode set to the given
+// value.
+//
+// ValueLogLoadingMode indicates which file loading mode should be used for the value log data
+// files.
+//
+// The default value of ValueLogLoadingMode is options.MemoryMap.
+func (opt Options) WithValueLogLoadingMode(val options.FileLoadingMode) Options {
+ opt.ValueLogLoadingMode = val
+ return opt
+}
+
+// WithNumVersionsToKeep returns a new Options value with NumVersionsToKeep set to the given value.
+//
+// NumVersionsToKeep sets how many versions to keep per key at most.
+//
+// The default value of NumVersionsToKeep is 1.
+func (opt Options) WithNumVersionsToKeep(val int) Options {
+ opt.NumVersionsToKeep = val
+ return opt
+}
+
+// WithReadOnly returns a new Options value with ReadOnly set to the given value.
+//
+// When ReadOnly is true the DB will be opened on read-only mode.
+// Multiple processes can open the same Badger DB.
+// Note: if the DB being opened had crashed before and has vlog data to be replayed,
+// ReadOnly will cause Open to fail with an appropriate message.
+//
+// The default value of ReadOnly is false.
+func (opt Options) WithReadOnly(val bool) Options {
+ opt.ReadOnly = val
+ return opt
+}
+
+// WithTruncate returns a new Options value with Truncate set to the given value.
+//
+// Truncate indicates whether value log files should be truncated to delete corrupt data, if any.
+// This option is ignored when ReadOnly is true.
+//
+// The default value of Truncate is false.
+func (opt Options) WithTruncate(val bool) Options {
+ opt.Truncate = val
+ return opt
+}
+
+// WithLogger returns a new Options value with Logger set to the given value.
+//
+// Logger provides a way to configure what logger each value of badger.DB uses.
+//
+// The default value of Logger writes to stderr using the log package from the Go standard library.
+func (opt Options) WithLogger(val Logger) Options {
+ opt.Logger = val
+ return opt
+}
+
+// WithEventLogging returns a new Options value with EventLogging set to the given value.
+//
+// EventLogging provides a way to enable or disable trace.EventLog logging.
+//
+// The default value of EventLogging is true.
+func (opt Options) WithEventLogging(enabled bool) Options {
+ opt.EventLogging = enabled
+ return opt
+}
+
+// WithMaxTableSize returns a new Options value with MaxTableSize set to the given value.
+//
+// MaxTableSize sets the maximum size in bytes for each LSM table or file.
+//
+// The default value of MaxTableSize is 64MB.
+func (opt Options) WithMaxTableSize(val int64) Options {
+ opt.MaxTableSize = val
+ return opt
+}
+
+// WithLevelSizeMultiplier returns a new Options value with LevelSizeMultiplier set to the given
+// value.
+//
+// LevelSizeMultiplier sets the ratio between the maximum sizes of contiguous levels in the LSM.
+// Once a level grows to be larger than this ratio allowed, the compaction process will be
+// triggered.
+//
+// The default value of LevelSizeMultiplier is 10.
+func (opt Options) WithLevelSizeMultiplier(val int) Options {
+ opt.LevelSizeMultiplier = val
+ return opt
+}
+
+// WithMaxLevels returns a new Options value with MaxLevels set to the given value.
+//
+// Maximum number of levels of compaction allowed in the LSM.
+//
+// The default value of MaxLevels is 7.
+func (opt Options) WithMaxLevels(val int) Options {
+ opt.MaxLevels = val
+ return opt
+}
+
+// WithValueThreshold returns a new Options value with ValueThreshold set to the given value.
+//
+// ValueThreshold sets the threshold used to decide whether a value is stored directly in the LSM
+// tree or separatedly in the log value files.
+//
+// The default value of ValueThreshold is 32, but LSMOnlyOptions sets it to 65500.
+func (opt Options) WithValueThreshold(val int) Options {
+ opt.ValueThreshold = val
+ return opt
+}
+
+// WithNumMemtables returns a new Options value with NumMemtables set to the given value.
+//
+// NumMemtables sets the maximum number of tables to keep in memory before stalling.
+//
+// The default value of NumMemtables is 5.
+func (opt Options) WithNumMemtables(val int) Options {
+ opt.NumMemtables = val
+ return opt
+}
+
+// WithNumLevelZeroTables returns a new Options value with NumLevelZeroTables set to the given
+// value.
+//
+// NumLevelZeroTables sets the maximum number of Level 0 tables before compaction starts.
+//
+// The default value of NumLevelZeroTables is 5.
+func (opt Options) WithNumLevelZeroTables(val int) Options {
+ opt.NumLevelZeroTables = val
+ return opt
+}
+
+// WithNumLevelZeroTablesStall returns a new Options value with NumLevelZeroTablesStall set to the
+// given value.
+//
+// NumLevelZeroTablesStall sets the number of Level 0 tables that once reached causes the DB to
+// stall until compaction succeeds.
+//
+// The default value of NumLevelZeroTablesStall is 10.
+func (opt Options) WithNumLevelZeroTablesStall(val int) Options {
+ opt.NumLevelZeroTablesStall = val
+ return opt
+}
+
+// WithLevelOneSize returns a new Options value with LevelOneSize set to the given value.
+//
+// LevelOneSize sets the maximum total size for Level 1.
+//
+// The default value of LevelOneSize is 20MB.
+func (opt Options) WithLevelOneSize(val int64) Options {
+ opt.LevelOneSize = val
+ return opt
+}
+
+// WithValueLogFileSize returns a new Options value with ValueLogFileSize set to the given value.
+//
+// ValueLogFileSize sets the maximum size of a single value log file.
+//
+// The default value of ValueLogFileSize is 1GB.
+func (opt Options) WithValueLogFileSize(val int64) Options {
+ opt.ValueLogFileSize = val
+ return opt
+}
+
+// WithValueLogMaxEntries returns a new Options value with ValueLogMaxEntries set to the given
+// value.
+//
+// ValueLogMaxEntries sets the maximum number of entries a value log file can hold approximately.
+// A actual size limit of a value log file is the minimum of ValueLogFileSize and
+// ValueLogMaxEntries.
+//
+// The default value of ValueLogMaxEntries is one million (1000000).
+func (opt Options) WithValueLogMaxEntries(val uint32) Options {
+ opt.ValueLogMaxEntries = val
+ return opt
+}
+
+// WithNumCompactors returns a new Options value with NumCompactors set to the given value.
+//
+// NumCompactors sets the number of compaction workers to run concurrently.
+// Setting this to zero stops compactions, which could eventually cause writes to block forever.
+//
+// The default value of NumCompactors is 2.
+func (opt Options) WithNumCompactors(val int) Options {
+ opt.NumCompactors = val
+ return opt
+}
+
+// WithCompactL0OnClose returns a new Options value with CompactL0OnClose set to the given value.
+//
+// CompactL0OnClose determines whether Level 0 should be compacted before closing the DB.
+// This ensures that both reads and writes are efficient when the DB is opened later.
+//
+// The default value of CompactL0OnClose is true.
+func (opt Options) WithCompactL0OnClose(val bool) Options {
+ opt.CompactL0OnClose = val
+ return opt
+}
+
+// WithLogRotatesToFlush returns a new Options value with LogRotatesToFlush set to the given value.
+//
+// LogRotatesToFlush sets the number of value log file rotates after which the Memtables are
+// flushed to disk. This is useful in write loads with fewer keys and larger values. This work load
+// would fill up the value logs quickly, while not filling up the Memtables. Thus, on a crash
+// and restart, the value log head could cause the replay of a good number of value log files
+// which can slow things on start.
+//
+// The default value of LogRotatesToFlush is 2.
+func (opt Options) WithLogRotatesToFlush(val int32) Options {
+ opt.LogRotatesToFlush = val
+ return opt
+}
+
+// WithVerifyValueChecksum returns a new Options value with VerifyValueChecksum set to
+// the given value.
+//
+// When VerifyValueChecksum is set to true, checksum will be verified for every entry read
+// from the value log. If the value is stored in SST (value size less than value threshold) then the
+// checksum validation will not be done.
+//
+// The default value of VerifyValueChecksum is False.
+func (opt Options) WithVerifyValueChecksum(val bool) Options {
+ opt.VerifyValueChecksum = val
+ return opt
+}
+
+// WithBypassLockGuard returns a new Options value with BypassLockGuard
+// set to the given value.
+//
+// When BypassLockGuard option is set, badger will not acquire a lock on the
+// directory. This could lead to data corruption if multiple badger instances
+// write to the same data directory. Use this option with caution.
+//
+// The default value of BypassLockGuard is false.
+func (opt Options) WithBypassLockGuard(b bool) Options {
+ opt.BypassLockGuard = b
+ return opt
+}