Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var DBBenchCmd = &cobra.Command{ Use: "dbbench [flags]", Short: "Perform a level/pebble db benchmark", Long: usage, RunE: func(cmd *cobra.Command, args []string) error { log.Info().Msg("Starting db test") var kvdb KeyValueDB var err error switch *dbMode { case "leveldb": kvdb, err = NewWrappedLevelDB() if err != nil { return err } case "pebbledb": kvdb, err = NewWrappedPebbleDB() if err != nil { return err } default: return fmt.Errorf("the mode %s is not recognized", *dbMode) } ctx := context.Background() var start time.Time trs := make([]*TestResult, 0) sequentialWritesDesc := "random" if *sequentialWrites { sequentialWritesDesc = "sequential" } sequentialReadsDesc := "random" if *sequentialReads { sequentialReadsDesc = "sequential" } if *fullScan { start = time.Now() opCount, valueDist := runFullScan(ctx, kvdb) tr := NewTestResult(start, time.Now(), "full scan", opCount) tr.ValueDist = valueDist trs = append(trs, tr) return printSummary(trs) } if !*readOnly { start = time.Now() writeData(ctx, kvdb, 0, *writeLimit, *sequentialWrites) trs = append(trs, NewTestResult(start, time.Now(), fmt.Sprintf("initial %s write", sequentialWritesDesc), *writeLimit)) for i := 0; i < int(*overwriteCount); i += 1 { start = time.Now() writeData(ctx, kvdb, 0, *writeLimit, *sequentialWrites) trs = append(trs, NewTestResult(start, time.Now(), fmt.Sprintf("%s overwrite %d", sequentialWritesDesc, i), *writeLimit)) } start = time.Now() runFullCompact(ctx, kvdb) trs = append(trs, NewTestResult(start, time.Now(), "compaction", 1)) } if *sequentialReads { start = time.Now() readSeq(ctx, kvdb, *readLimit) trs = append(trs, NewTestResult(start, time.Now(), fmt.Sprintf("%s read", sequentialReadsDesc), *readLimit)) } else { start = time.Now() readRandom(ctx, kvdb, *readLimit) trs = append(trs, NewTestResult(start, time.Now(), fmt.Sprintf("%s read", sequentialWritesDesc), *readLimit)) } log.Info().Msg("Close DB") err = kvdb.Close() if err != nil { log.Error().Err(err).Msg("Error while closing db") } return printSummary(trs) }, Args: func(cmd *cobra.Command, args []string) error { var err error sizeDistribution, err = parseRawSizeDistribution(*rawSizeDistribution) if err != nil { return err } if *keySize > 64 { return fmt.Errorf(" max supported key size is 64 bytes. %d is too big", *keySize) } return nil }, }
Functions ¶
This section is empty.
Types ¶
type IODistribution ¶
type IODistribution struct {
// contains filtered or unexported fields
}
func NewIODistribution ¶
func NewIODistribution(ranges []IORange) (*IODistribution, error)
func (*IODistribution) GetSizeSample ¶
func (i *IODistribution) GetSizeSample() uint64
GetSizeSample will return an IO size in accordance with the probability distribution
type KeyValueDB ¶
type KeyValueDB interface { Close() error Compact() error NewIterator() iterator.Iterator Get([]byte) ([]byte, error) Put([]byte, []byte) error }
KeyValueDB directly exposes the necessary methods of leveldb.DB that we need to run the test so that they can be implemented by other KV stores
type LevelDBWrapper ¶
type LevelDBWrapper struct {
// contains filtered or unexported fields
}
func NewWrappedLevelDB ¶
func NewWrappedLevelDB() (*LevelDBWrapper, error)
func (*LevelDBWrapper) Close ¶
func (l *LevelDBWrapper) Close() error
func (*LevelDBWrapper) Compact ¶
func (l *LevelDBWrapper) Compact() error
func (*LevelDBWrapper) NewIterator ¶
func (l *LevelDBWrapper) NewIterator() iterator.Iterator
type LoadTestOperation ¶
type LoadTestOperation int
type PebbleDBWrapper ¶
func NewWrappedPebbleDB ¶
func NewWrappedPebbleDB() (*PebbleDBWrapper, error)
func (*PebbleDBWrapper) Close ¶
func (p *PebbleDBWrapper) Close() error
func (*PebbleDBWrapper) Compact ¶
func (p *PebbleDBWrapper) Compact() error
func (*PebbleDBWrapper) NewIterator ¶
func (p *PebbleDBWrapper) NewIterator() iterator.Iterator
type RandomKeySeeker ¶
type RandomKeySeeker struct {
// contains filtered or unexported fields
}
func NewRandomKeySeeker ¶
func NewRandomKeySeeker(db KeyValueDB) *RandomKeySeeker
func (*RandomKeySeeker) Key ¶
func (r *RandomKeySeeker) Key() []byte
type TestResult ¶
type TestResult struct { StartTime time.Time EndTime time.Time TestDuration time.Duration Description string OpCount uint64 OpRate float64 ValueDist []uint64 }
func NewTestResult ¶
func NewTestResult(startTime, endTime time.Time, desc string, opCount uint64) *TestResult
type WrappedPebbleIterator ¶
func (*WrappedPebbleIterator) Release ¶
func (w *WrappedPebbleIterator) Release()
func (*WrappedPebbleIterator) Seek ¶
func (w *WrappedPebbleIterator) Seek(key []byte) bool
func (*WrappedPebbleIterator) SetReleaser ¶
func (w *WrappedPebbleIterator) SetReleaser(releaser util.Releaser)
Click to show internal directories.
Click to hide internal directories.