Documentation ¶
Index ¶
- Variables
- type BenchmarkRunner
- func (b *BenchmarkRunner) DatabaseName() string
- func (b *BenchmarkRunner) DebugLevel() int
- func (b *BenchmarkRunner) DoPrintResponses() bool
- func (b *BenchmarkRunner) GetBufferedReader() *bufio.Reader
- func (b *BenchmarkRunner) Run(queryPool *sync.Pool, processorCreateFn ProcessorCreate)
- func (b *BenchmarkRunner) SetLimit(limit uint64)
- type BenchmarkRunnerConfig
- type Cassandra
- type ClickHouse
- type CrateDB
- type HTTP
- type Mongo
- type Processor
- type ProcessorCreate
- type Query
- type SiriDB
- type Stat
- type TimescaleDB
- type Timestream
Constants ¶
This section is empty.
Variables ¶
var CassandraPool = sync.Pool{ New: func() interface{} { return &Cassandra{ HumanLabel: []byte{}, HumanDescription: []byte{}, MeasurementName: []byte{}, FieldName: []byte{}, AggregationType: []byte{}, ForEveryN: []byte{}, WhereClause: []byte{}, OrderBy: []byte{}, TagSets: [][]string{}, } }, }
CassandraPool is a sync.Pool of Cassandra Query types
var ClickHousePool = sync.Pool{ New: func() interface{} { return &ClickHouse{ HumanLabel: make([]byte, 0, 1024), HumanDescription: make([]byte, 0, 1024), Table: make([]byte, 0, 1024), SqlQuery: make([]byte, 0, 1024), } }, }
ClickHousePool is a sync.Pool of ClickHouse Query types
var CrateDBPool = sync.Pool{ New: func() interface{} { return &CrateDB{ HumanLabel: make([]byte, 0, 1024), HumanDescription: make([]byte, 0, 1024), Table: make([]byte, 0, 1024), SqlQuery: make([]byte, 0, 1024), } }, }
var HTTPPool = sync.Pool{ New: func() interface{} { return &HTTP{ HumanLabel: []byte{}, HumanDescription: []byte{}, Method: []byte{}, Path: []byte{}, Body: []byte{}, RawQuery: []byte{}, StartTimestamp: 0, EndTimestamp: 0, } }, }
HTTPPool is a sync.Pool of HTTP Query types
var MongoPool = sync.Pool{ New: func() interface{} { return &Mongo{ HumanLabel: []byte{}, HumanDescription: []byte{}, CollectionName: []byte{}, BsonDoc: []bson.M{}, } }, }
MongoPool is a sync.Pool of Mongo Query types
var SiriDBPool = sync.Pool{ New: func() interface{} { return &SiriDB{ HumanLabel: make([]byte, 0, 1024), HumanDescription: make([]byte, 0, 1024), SqlQuery: make([]byte, 0, 1024), } }, }
var TimescaleDBPool = sync.Pool{ New: func() interface{} { return &TimescaleDB{ HumanLabel: make([]byte, 0, 1024), HumanDescription: make([]byte, 0, 1024), Hypertable: make([]byte, 0, 1024), SqlQuery: make([]byte, 0, 1024), } }, }
TimescaleDBPool is a sync.Pool of TimescaleDB Query types
var TimestreamPool = sync.Pool{ New: func() interface{} { return &Timestream{ HumanLabel: make([]byte, 0, 1024), HumanDescription: make([]byte, 0, 1024), Table: make([]byte, 0, 50), SqlQuery: make([]byte, 0, 1024), } }, }
TimestreamPool is a sync.Pool of Timestream Query types
Functions ¶
This section is empty.
Types ¶
type BenchmarkRunner ¶
type BenchmarkRunner struct { BenchmarkRunnerConfig // contains filtered or unexported fields }
BenchmarkRunner contains the common components for running a query benchmarking program against a database.
func NewBenchmarkRunner ¶
func NewBenchmarkRunner(config BenchmarkRunnerConfig) *BenchmarkRunner
NewBenchmarkRunner creates a new instance of BenchmarkRunner which is common functionality to be used by query benchmarker programs
func (*BenchmarkRunner) DatabaseName ¶
func (b *BenchmarkRunner) DatabaseName() string
DatabaseName returns the name of the database to run queries against
func (*BenchmarkRunner) DebugLevel ¶
func (b *BenchmarkRunner) DebugLevel() int
DebugLevel returns the level of debug messages for this benchmark
func (*BenchmarkRunner) DoPrintResponses ¶
func (b *BenchmarkRunner) DoPrintResponses() bool
DoPrintResponses indicates whether responses for queries should be printed
func (*BenchmarkRunner) GetBufferedReader ¶
func (b *BenchmarkRunner) GetBufferedReader() *bufio.Reader
GetBufferedReader returns the buffered Reader that should be used by the loader
func (*BenchmarkRunner) Run ¶
func (b *BenchmarkRunner) Run(queryPool *sync.Pool, processorCreateFn ProcessorCreate)
Run does the bulk of the benchmark execution. It launches a gorountine to track stats, creates workers to process queries, read in the input, execute the queries, and then does cleanup.
func (*BenchmarkRunner) SetLimit ¶
func (b *BenchmarkRunner) SetLimit(limit uint64)
SetLimit changes the number of queries to run, with 0 being all of them
type BenchmarkRunnerConfig ¶
type BenchmarkRunnerConfig struct { DBName string `mapstructure:"db-name"` Limit uint64 `mapstructure:"max-queries"` LimitRPS uint64 `mapstructure:"max-rps"` MemProfile string `mapstructure:"memprofile"` HDRLatenciesFile string `mapstructure:"hdr-latencies"` LatenciesFile string `mapstructure:"latencies-file"` Workers uint `mapstructure:"workers"` PrintResponses bool `mapstructure:"print-responses"` Debug int `mapstructure:"debug"` FileName string `mapstructure:"file"` BurnIn uint64 `mapstructure:"burn-in"` PrintInterval uint64 `mapstructure:"print-interval"` PrewarmQueries bool `mapstructure:"prewarm-queries"` }
BenchmarkRunnerConfig is the configuration of the benchmark runner.
func (BenchmarkRunnerConfig) AddToFlagSet ¶
func (c BenchmarkRunnerConfig) AddToFlagSet(fs *pflag.FlagSet)
AddToFlagSet adds command line flags needed by the BenchmarkRunnerConfig to the flag set.
type Cassandra ¶
type Cassandra struct { HumanLabel []byte HumanDescription []byte MeasurementName []byte // e.g. "cpu" FieldName []byte // e.g. "usage_user" AggregationType []byte // e.g. "avg" or "sum". used literally in the cassandra query. TimeStart time.Time TimeEnd time.Time GroupByDuration time.Duration ForEveryN []byte // e.g. "hostname,1" WhereClause []byte // e.g. "usage_user,>,90.0" OrderBy []byte // e.g. "timestamp_ns DESC" Limit int TagSets [][]string // semantically, each subgroup is OR'ed and they are all AND'ed together // contains filtered or unexported fields }
Cassandra encodes a Cassandra request. This will be serialized for use by the tsbs_run_queries_cassandra program.
func NewCassandra ¶
func NewCassandra() *Cassandra
NewCassandra returns a new Cassandra Query instance
func (*Cassandra) HumanDescriptionName ¶
HumanDescriptionName returns the human readable description of this Query
func (*Cassandra) HumanLabelName ¶
HumanLabelName returns the human readable name of this Query
type ClickHouse ¶
type ClickHouse struct { HumanLabel []byte HumanDescription []byte Table []byte // e.g. "cpu" SqlQuery []byte // contains filtered or unexported fields }
ClickHouse encodes a ClickHouse query. This will be serialized for use by the tsbs_run_queries_clickhouse program.
func NewClickHouse ¶
func NewClickHouse() *ClickHouse
NewClickHouse returns a new ClickHouse Query instance
func (*ClickHouse) HumanDescriptionName ¶
func (ch *ClickHouse) HumanDescriptionName() []byte
HumanDescriptionName returns the human readable description of this Query
func (*ClickHouse) HumanLabelName ¶
func (ch *ClickHouse) HumanLabelName() []byte
HumanLabelName returns the human readable name of this Query
func (*ClickHouse) Release ¶
func (ch *ClickHouse) Release()
Release resets and returns this Query to its pool
func (*ClickHouse) String ¶
func (ch *ClickHouse) String() string
String produces a debug-ready description of a Query.
type CrateDB ¶
type CrateDB struct { HumanLabel []byte HumanDescription []byte Table []byte // e.g. "cpu" SqlQuery []byte // contains filtered or unexported fields }
CrateDB encodes a CrateDB request. This will be serialized for use by the tsbs_run_queries_cratedb program.
func NewCrateDB ¶
func NewCrateDB() *CrateDB
func (*CrateDB) HumanDescriptionName ¶
func (*CrateDB) HumanLabelName ¶
type HTTP ¶
type HTTP struct { HumanLabel []byte HumanDescription []byte Method []byte Path []byte Body []byte RawQuery []byte StartTimestamp int64 EndTimestamp int64 // contains filtered or unexported fields }
HTTP encodes an HTTP request. This will typically by serialized for use by the appropriate tsbs_run_queries program.
func (*HTTP) HumanDescriptionName ¶
HumanDescriptionName returns the human readable description of this Query
func (*HTTP) HumanLabelName ¶
HumanLabelName returns the human readable name of this Query
type Mongo ¶
type Mongo struct { HumanLabel []byte HumanDescription []byte CollectionName []byte BsonDoc []bson.M // contains filtered or unexported fields }
Mongo encodes a Mongo request. This will be serialized for use by the tsbs_run_queries_mongo program.
func (*Mongo) HumanDescriptionName ¶
HumanDescriptionName returns the human readable description of this Query
func (*Mongo) HumanLabelName ¶
HumanLabelName returns the human readable name of this Query
type Processor ¶
type Processor interface { // Init initializes at global state for the Processor, possibly based on its worker number / ID Init(workerNum int) // ProcessQuery handles a given query and reports its stats ProcessQuery(q Query, isWarm bool) ([]*Stat, error) }
Processor is an interface that handles the setup of a query processing worker and executes queries one at a time
type ProcessorCreate ¶
type ProcessorCreate func() Processor
ProcessorCreate is a function that creates a new Processor (called in Run)
type Query ¶
type Query interface { Release() HumanLabelName() []byte HumanDescriptionName() []byte GetID() uint64 SetID(uint64) fmt.Stringer }
Query is an interface used for encoding a benchmark query for different databases
type SiriDB ¶
type SiriDB struct { HumanLabel []byte HumanDescription []byte SqlQuery []byte // contains filtered or unexported fields }
func (*SiriDB) HumanDescriptionName ¶
HumanDescriptionName returns the human readable description of this Query
func (*SiriDB) HumanLabelName ¶
HumanLabelName returns the human readable name of this Query
type Stat ¶
type Stat struct {
// contains filtered or unexported fields
}
Stat represents one statistical measurement, typically used to store the latency of a query (or part of query).
func GetPartialStat ¶
func GetPartialStat() *Stat
GetPartialStat returns a partial Stat for use from a pool
type TimescaleDB ¶
type TimescaleDB struct { HumanLabel []byte HumanDescription []byte Hypertable []byte // e.g. "cpu" SqlQuery []byte // contains filtered or unexported fields }
TimescaleDB encodes a TimescaleDB request. This will be serialized for use by the tsbs_run_queries_timescaledb program.
func NewTimescaleDB ¶
func NewTimescaleDB() *TimescaleDB
NewTimescaleDB returns a new TimescaleDB Query instance
func (*TimescaleDB) HumanDescriptionName ¶
func (q *TimescaleDB) HumanDescriptionName() []byte
HumanDescriptionName returns the human readable description of this Query
func (*TimescaleDB) HumanLabelName ¶
func (q *TimescaleDB) HumanLabelName() []byte
HumanLabelName returns the human readable name of this Query
func (*TimescaleDB) Release ¶
func (q *TimescaleDB) Release()
Release resets and returns this Query to its pool
func (*TimescaleDB) String ¶
func (q *TimescaleDB) String() string
String produces a debug-ready description of a Query.
type Timestream ¶
type Timestream struct { HumanLabel []byte HumanDescription []byte Table []byte // e.g. "cpu" SqlQuery []byte // contains filtered or unexported fields }
Timestream encodes a Timestream request. This will be serialized for use by the tsbs_run_queries_timestream program.
func NewTimestream ¶
func NewTimestream() *Timestream
NewTimestream returns a new Timestream Query instance
func (*Timestream) HumanDescriptionName ¶
func (q *Timestream) HumanDescriptionName() []byte
HumanDescriptionName returns the human readable description of this Query
func (*Timestream) HumanLabelName ¶
func (q *Timestream) HumanLabelName() []byte
HumanLabelName returns the human readable name of this Query
func (*Timestream) Release ¶
func (q *Timestream) Release()
Release resets and returns this Query to its pool
func (*Timestream) String ¶
func (q *Timestream) String() string
String produces a debug-ready description of a Query.