Documentation ¶
Overview ¶
Package tsi1 provides a memory-mapped index implementation that supports high cardinality series.
Overview ¶
The top-level object in tsi1 is the Index. It is the primary access point from the rest of the system. The Index is composed of LogFile and IndexFile objects.
Log files are small write-ahead log files that record new series immediately in the order that they are received. The data within the file is indexed in-memory so it can be quickly accessed. When the system is restarted, this log file is replayed and the in-memory representation is rebuilt.
Index files also contain series information, however, they are highly indexed so that reads can be performed quickly. Index files are built through a process called compaction where a log file or multiple index files are merged together.
Operations ¶
The index can perform many tasks related to series, measurement, & tag data. All data is inserted by adding a series to the index. When adding a series, the measurement, tag keys, and tag values are all extracted and indexed separately.
Once a series has been added, it can be removed in several ways. First, the individual series can be removed. Second, it can be removed as part of a bulk operation by deleting the entire measurement.
The query engine needs to be able to look up series in a variety of ways such as by measurement name, by tag value, or by using regular expressions. The index provides an API to iterate over subsets of series and perform set operations such as unions and intersections.
Log File Layout ¶
The write-ahead file that series initially are inserted into simply appends all new operations sequentially. It is simply composed of a series of log entries. An entry contains a flag to specify the operation type, the measurement name, the tag set, and a checksum.
┏━━━━━━━━━LogEntry━━━━━━━━━┓ ┃ ┌──────────────────────┐ ┃ ┃ │ Flag │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Measurement │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Key/Value │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Key/Value │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Key/Value │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Checksum │ ┃ ┃ └──────────────────────┘ ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛
When the log file is replayed, if the checksum is incorrect or the entry is incomplete (because of a partially failed write) then the log is truncated.
Index File Layout ¶
The index file is composed of 3 main block types: one series block, one or more tag blocks, and one measurement block. At the end of the index file is a trailer that records metadata such as the offsets to these blocks.
Series Block Layout ¶
The series block stores raw series keys in sorted order. It also provides hash indexes so that series can be looked up quickly. Hash indexes are inserted periodically so that memory size is limited at write time. Once all the series and hash indexes have been written then a list of index entries are written so that hash indexes can be looked up via binary search.
The end of the block contains two HyperLogLog++ sketches which track the estimated number of created series and deleted series. After the sketches is a trailer which contains metadata about the block.
┏━━━━━━━SeriesBlock━━━━━━━━┓ ┃ ┌──────────────────────┐ ┃ ┃ │ Series Key │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Series Key │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Series Key │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ │ ┃ ┃ │ Hash Index │ ┃ ┃ │ │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Series Key │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Series Key │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Series Key │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ │ ┃ ┃ │ Hash Index │ ┃ ┃ │ │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Index Entries │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ HLL Sketches │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Trailer │ ┃ ┃ └──────────────────────┘ ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Tag Block Layout ¶
After the series block is one or more tag blocks. One of these blocks exists for every measurement in the index file. The block is structured as a sorted list of values for each key and then a sorted list of keys. Each of these lists has their own hash index for fast direct lookups.
┏━━━━━━━━Tag Block━━━━━━━━━┓ ┃ ┌──────────────────────┐ ┃ ┃ │ Value │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Value │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Value │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ │ ┃ ┃ │ Hash Index │ ┃ ┃ │ │ ┃ ┃ └──────────────────────┘ ┃ ┃ ┌──────────────────────┐ ┃ ┃ │ Value │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Value │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ │ ┃ ┃ │ Hash Index │ ┃ ┃ │ │ ┃ ┃ └──────────────────────┘ ┃ ┃ ┌──────────────────────┐ ┃ ┃ │ Key │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Key │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ │ ┃ ┃ │ Hash Index │ ┃ ┃ │ │ ┃ ┃ └──────────────────────┘ ┃ ┃ ┌──────────────────────┐ ┃ ┃ │ Trailer │ ┃ ┃ └──────────────────────┘ ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Each entry for values contains a sorted list of offsets for series keys that use that value. Series iterators can be built around a single tag key value or multiple iterators can be merged with set operators such as union or intersection.
Measurement block ¶
The measurement block stores a sorted list of measurements, their associated series offsets, and the offset to their tag block. This allows all series for a measurement to be traversed quickly and it allows fast direct lookups of measurements and their tags.
This block also contains HyperLogLog++ sketches for new and deleted measurements.
┏━━━━Measurement Block━━━━━┓ ┃ ┌──────────────────────┐ ┃ ┃ │ Measurement │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Measurement │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Measurement │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ │ ┃ ┃ │ Hash Index │ ┃ ┃ │ │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ HLL Sketches │ ┃ ┃ ├──────────────────────┤ ┃ ┃ │ Trailer │ ┃ ┃ └──────────────────────┘ ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛
Manifest file ¶
The index is simply an ordered set of log and index files. These files can be merged together or rewritten but their order must always be the same. This is because series, measurements, & tags can be marked as deleted (aka tombstoned) and this action needs to be tracked in time order.
Whenever the set of active files is changed, a manifest file is written to track the set. The manifest specifies the ordering of files and, on startup, all files not in the manifest are removed from the index directory.
Compacting index files ¶
Compaction is the process of taking files and merging them together into a single file. There are two stages of compaction within TSI.
First, once log files exceed a size threshold then they are compacted into an index file. This threshold is relatively small because log files must maintain their index in the heap which TSI tries to avoid. Small log files are also very quick to convert into an index file so this is done aggressively.
Second, once a contiguous set of index files exceed a factor (e.g. 10x) then they are all merged together into a single index file and the old files are discarded. Because all blocks are written in sorted order, the new index file can be streamed and minimize memory use.
Concurrency ¶
Index files are immutable so they do not require fine grained locks, however, compactions require that we track which files are in use so they are not discarded too soon. This is done by using reference counting with file sets.
A file set is simply an ordered list of index files. When the current file set is obtained from the index, a counter is incremented to track its usage. Once the user is done with the file set, it is released and the counter is decremented. A file cannot be removed from the file system until this counter returns to zero.
Besides the reference counting, there are no other locking mechanisms when reading or writing index files. Log files, however, do require a lock whenever they are accessed. This is another reason to minimize log file size.
Index ¶
- Constants
- Variables
- func AppendSeriesElem(dst []byte, flag byte, name []byte, tags models.Tags) []byte
- func AppendSeriesKey(dst []byte, name []byte, tags models.Tags) []byte
- func CompareSeriesElem(a, b SeriesElem) int
- func CompareSeriesKeys(a, b []byte) int
- func FormatIndexFileName(id, level int) string
- func FormatLogFileName(id int) string
- func ParseFilename(name string) (level, id int)
- func ReadSeriesKey(data []byte) []byte
- func SeriesElemKey(e SeriesElem) []byte
- func WriteManifestFile(path string, m *Manifest) error
- type CompactionLevel
- type File
- type FileSet
- func (fs FileSet) Close() error
- func (fs *FileSet) Files() []File
- func (fs *FileSet) FilterNamesTags(names [][]byte, tagsSlice []models.Tags) ([][]byte, []models.Tags)
- func (fs *FileSet) HasSeries(name []byte, tags models.Tags, buf []byte) bool
- func (fs *FileSet) HasTagKey(name, key []byte) bool
- func (fs *FileSet) HasTagValue(name, key, value []byte) bool
- func (fs *FileSet) IndexFiles() []*IndexFile
- func (fs *FileSet) LastContiguousIndexFilesByLevel(level int) []*IndexFile
- func (fs *FileSet) LogFiles() []*LogFile
- func (fs *FileSet) MatchTagValueSeriesIterator(name, key []byte, value *regexp.Regexp, matches bool) SeriesIterator
- func (fs *FileSet) MaxID() int
- func (fs *FileSet) Measurement(name []byte) MeasurementElem
- func (fs *FileSet) MeasurementIterator() MeasurementIterator
- func (fs *FileSet) MeasurementNamesByExpr(auth query.Authorizer, expr influxql.Expr) ([][]byte, error)
- func (fs *FileSet) MeasurementSeriesByExprIterator(name []byte, expr influxql.Expr, fieldset *tsdb.MeasurementFieldSet) (SeriesIterator, error)
- func (fs *FileSet) MeasurementSeriesIterator(name []byte) SeriesIterator
- func (fs *FileSet) MeasurementSeriesKeysByExpr(name []byte, expr influxql.Expr, fieldset *tsdb.MeasurementFieldSet) ([][]byte, error)
- func (fs *FileSet) MeasurementTagKeysByExpr(name []byte, expr influxql.Expr) (map[string]struct{}, error)
- func (fs *FileSet) MeasurementsSketches() (estimator.Sketch, estimator.Sketch, error)
- func (fs *FileSet) MustReplace(oldFiles []File, newFile File) *FileSet
- func (fs *FileSet) PrependLogFile(f *LogFile) *FileSet
- func (fs *FileSet) Release()
- func (fs *FileSet) Retain()
- func (fs *FileSet) SeriesIterator() SeriesIterator
- func (fs *FileSet) SeriesSketches() (estimator.Sketch, estimator.Sketch, error)
- func (fs *FileSet) TagKeyIterator(name []byte) TagKeyIterator
- func (fs *FileSet) TagKeySeriesIterator(name, key []byte) SeriesIterator
- func (fs *FileSet) TagValueIterator(name, key []byte) TagValueIterator
- func (fs *FileSet) TagValueSeriesIterator(name, key, value []byte) SeriesIterator
- type Files
- type Index
- func (i *Index) AssignShard(k string, shardID uint64)
- func (i *Index) CheckLogFile() error
- func (i *Index) Close() error
- func (i *Index) Compact()
- func (i *Index) CreateSeriesIfNotExists(key, name []byte, tags models.Tags) error
- func (i *Index) CreateSeriesListIfNotExists(_, names [][]byte, tagsSlice []models.Tags) error
- func (i *Index) DropMeasurement(name []byte) error
- func (i *Index) DropSeries(key []byte) error
- func (i *Index) FileN() int
- func (i *Index) ForEachMeasurementName(fn func(name []byte) error) error
- func (i *Index) ForEachMeasurementTagKey(name []byte, fn func(key []byte) error) error
- func (i *Index) HasTagKey(name, key []byte) (bool, error)
- func (i *Index) InitializeSeries(key, name []byte, tags models.Tags) error
- func (i *Index) Manifest() *Manifest
- func (i *Index) ManifestPath() string
- func (i *Index) MeasurementExists(name []byte) (bool, error)
- func (i *Index) MeasurementNamesByExpr(auth query.Authorizer, expr influxql.Expr) ([][]byte, error)
- func (i *Index) MeasurementNamesByRegex(re *regexp.Regexp) ([][]byte, error)
- func (i *Index) MeasurementSeriesKeysByExpr(name []byte, expr influxql.Expr) ([][]byte, error)
- func (i *Index) MeasurementTagKeyValuesByExpr(auth query.Authorizer, name []byte, keys []string, expr influxql.Expr, ...) ([][]string, error)
- func (i *Index) MeasurementTagKeysByExpr(name []byte, expr influxql.Expr) (map[string]struct{}, error)
- func (i *Index) MeasurementsSketches() (estimator.Sketch, estimator.Sketch, error)
- func (i *Index) NextSequence() int
- func (i *Index) Open() error
- func (i *Index) Rebuild()
- func (i *Index) RemoveShard(shardID uint64)
- func (i *Index) RetainFileSet() *FileSet
- func (i *Index) SeriesN() int64
- func (i *Index) SeriesPointIterator(opt query.IteratorOptions) (query.Iterator, error)
- func (i *Index) SeriesSketches() (estimator.Sketch, estimator.Sketch, error)
- func (i *Index) SetFieldName(measurement []byte, name string)
- func (i *Index) SetFieldSet(fs *tsdb.MeasurementFieldSet)
- func (i *Index) SnapshotTo(path string) error
- func (i *Index) TagKeyCardinality(name, key []byte) int
- func (i *Index) TagKeyHasAuthorizedSeries(auth query.Authorizer, name []byte, key string) bool
- func (i *Index) TagSets(name []byte, opt query.IteratorOptions) ([]*query.TagSet, error)
- func (i *Index) Type() string
- func (i *Index) UnassignShard(k string, shardID uint64) error
- func (i *Index) Wait()
- func (i *Index) WithLogger(logger zap.Logger)
- type IndexFile
- func (f *IndexFile) Close() error
- func (f *IndexFile) Compacting() bool
- func (f *IndexFile) Filter() *bloom.Filter
- func (f *IndexFile) HasSeries(name []byte, tags models.Tags, buf []byte) (exists, tombstoned bool)
- func (f *IndexFile) ID() int
- func (f *IndexFile) Level() int
- func (f *IndexFile) Measurement(name []byte) MeasurementElem
- func (f *IndexFile) MeasurementIterator() MeasurementIterator
- func (f *IndexFile) MeasurementN() (n uint64)
- func (f *IndexFile) MeasurementSeriesIterator(name []byte) SeriesIterator
- func (f *IndexFile) MergeMeasurementsSketches(s, t estimator.Sketch) error
- func (f *IndexFile) MergeSeriesSketches(s, t estimator.Sketch) error
- func (f *IndexFile) Open() error
- func (f *IndexFile) Path() string
- func (f *IndexFile) Release()
- func (f *IndexFile) Retain()
- func (f *IndexFile) Series(name []byte, tags models.Tags) SeriesElem
- func (f *IndexFile) SeriesIterator() SeriesIterator
- func (f *IndexFile) SeriesN() uint64
- func (f *IndexFile) SetPath(path string)
- func (f *IndexFile) Size() int64
- func (f *IndexFile) TagKey(name, key []byte) TagKeyElem
- func (f *IndexFile) TagKeyIterator(name []byte) TagKeyIterator
- func (f *IndexFile) TagKeySeriesIterator(name, key []byte) SeriesIterator
- func (f *IndexFile) TagValue(name, key, value []byte) TagValueElem
- func (f *IndexFile) TagValueElem(name, key, value []byte) TagValueElem
- func (f *IndexFile) TagValueIterator(name, key []byte) TagValueIterator
- func (f *IndexFile) TagValueSeriesIterator(name, key, value []byte) SeriesIterator
- func (f *IndexFile) UnmarshalBinary(data []byte) error
- type IndexFileTrailer
- type IndexFiles
- func (p IndexFiles) CompactTo(w io.Writer, m, k uint64) (n int64, err error)
- func (p IndexFiles) Files() []File
- func (p IndexFiles) IDs() []int
- func (p IndexFiles) MeasurementIterator() MeasurementIterator
- func (p *IndexFiles) MeasurementNames() [][]byte
- func (p IndexFiles) MeasurementSeriesIterator(name []byte) SeriesIterator
- func (p IndexFiles) Release()
- func (p IndexFiles) Retain()
- func (p IndexFiles) SeriesIterator() SeriesIterator
- func (p IndexFiles) Stat() (*IndexFilesInfo, error)
- func (p *IndexFiles) TagKeyIterator(name []byte) (TagKeyIterator, error)
- func (p IndexFiles) TagValueSeriesIterator(name, key, value []byte) SeriesIterator
- type IndexFilesInfo
- type LogEntry
- type LogFile
- func (f *LogFile) AddSeries(name []byte, tags models.Tags) error
- func (f *LogFile) AddSeriesList(names [][]byte, tagsSlice []models.Tags) error
- func (f *LogFile) Close() error
- func (f *LogFile) CompactTo(w io.Writer, m, k uint64) (n int64, err error)
- func (f *LogFile) DeleteMeasurement(name []byte) error
- func (f *LogFile) DeleteSeries(name []byte, tags models.Tags) error
- func (f *LogFile) DeleteTagKey(name, key []byte) error
- func (f *LogFile) DeleteTagValue(name, key, value []byte) error
- func (f *LogFile) Filter() *bloom.Filter
- func (f *LogFile) FilterNamesTags(names [][]byte, tagsSlice []models.Tags) ([][]byte, []models.Tags)
- func (f *LogFile) Flush() error
- func (f *LogFile) HasSeries(name []byte, tags models.Tags, buf []byte) (exists, tombstoned bool)
- func (f *LogFile) ID() int
- func (f *LogFile) Level() int
- func (f *LogFile) Measurement(name []byte) MeasurementElem
- func (f *LogFile) MeasurementIterator() MeasurementIterator
- func (f *LogFile) MeasurementN() (n uint64)
- func (f *LogFile) MeasurementNames() []string
- func (f *LogFile) MeasurementSeriesIterator(name []byte) SeriesIterator
- func (f *LogFile) MergeMeasurementsSketches(sketch, tsketch estimator.Sketch) error
- func (f *LogFile) MergeSeriesSketches(sketch, tsketch estimator.Sketch) error
- func (f *LogFile) Open() error
- func (f *LogFile) Path() string
- func (f *LogFile) Release()
- func (f *LogFile) Retain()
- func (f *LogFile) Series(name []byte, tags models.Tags) SeriesElem
- func (f *LogFile) SeriesIterator() SeriesIterator
- func (f *LogFile) SeriesN() (n uint64)
- func (f *LogFile) SeriesWithBuffer(name []byte, tags models.Tags, buf []byte) SeriesElem
- func (f *LogFile) SetPath(path string)
- func (f *LogFile) Size() int64
- func (f *LogFile) Stat() (int64, time.Time)
- func (f *LogFile) TagKey(name, key []byte) TagKeyElem
- func (f *LogFile) TagKeyIterator(name []byte) TagKeyIterator
- func (f *LogFile) TagKeyN() (n uint64)
- func (f *LogFile) TagKeySeriesIterator(name, key []byte) SeriesIterator
- func (f *LogFile) TagValue(name, key, value []byte) TagValueElem
- func (f *LogFile) TagValueIterator(name, key []byte) TagValueIterator
- func (f *LogFile) TagValueN() (n uint64)
- func (f *LogFile) TagValueSeriesIterator(name, key, value []byte) SeriesIterator
- type Manifest
- type MeasurementBlock
- type MeasurementBlockElem
- func (e *MeasurementBlockElem) Deleted() bool
- func (e *MeasurementBlockElem) Name() []byte
- func (e *MeasurementBlockElem) SeriesData() []byte
- func (e *MeasurementBlockElem) SeriesID(i int) uint32
- func (e *MeasurementBlockElem) SeriesIDs() []uint32
- func (e *MeasurementBlockElem) SeriesN() uint32
- func (e *MeasurementBlockElem) Size() int
- func (e *MeasurementBlockElem) TagBlockOffset() int64
- func (e *MeasurementBlockElem) TagBlockSize() int64
- func (e *MeasurementBlockElem) UnmarshalBinary(data []byte) error
- type MeasurementBlockTrailer
- type MeasurementBlockWriter
- type MeasurementElem
- type MeasurementElems
- type MeasurementIterator
- type SeriesBlock
- func (blk *SeriesBlock) HasSeries(name []byte, tags models.Tags, buf []byte) (exists, tombstoned bool)
- func (blk *SeriesBlock) Offset(name []byte, tags models.Tags, buf []byte) (offset uint32, tombstoned bool)
- func (blk *SeriesBlock) Series(name []byte, tags models.Tags) SeriesElem
- func (blk *SeriesBlock) SeriesCount() uint32
- func (blk *SeriesBlock) SeriesIterator() SeriesIterator
- func (blk *SeriesBlock) UnmarshalBinary(data []byte) error
- type SeriesBlockElem
- type SeriesBlockEncoder
- type SeriesBlockTrailer
- type SeriesElem
- type SeriesIterator
- func DifferenceSeriesIterators(itr0, itr1 SeriesIterator) SeriesIterator
- func FilterUndeletedSeriesIterator(itr SeriesIterator) SeriesIterator
- func IntersectSeriesIterators(itr0, itr1 SeriesIterator) SeriesIterator
- func MergeSeriesIterators(itrs ...SeriesIterator) SeriesIterator
- func UnionSeriesIterators(itr0, itr1 SeriesIterator) SeriesIterator
- type TagBlock
- type TagBlockEncoder
- type TagBlockKeyElem
- type TagBlockTrailer
- type TagBlockValueElem
- func (e *TagBlockValueElem) Deleted() bool
- func (e *TagBlockValueElem) SeriesData() []byte
- func (e *TagBlockValueElem) SeriesID(i int) uint32
- func (e *TagBlockValueElem) SeriesIDs() []uint32
- func (e *TagBlockValueElem) SeriesN() uint32
- func (e *TagBlockValueElem) Size() int
- func (e *TagBlockValueElem) Value() []byte
- type TagKeyElem
- type TagKeyIterator
- type TagValueElem
- type TagValueIterator
Constants ¶
const ( // IndexName is the name of the index. IndexName = "tsi1" // Version is the current version of the TSI index. Version = 1 )
const ( LogFileExt = ".tsl" IndexFileExt = ".tsi" CompactingExt = ".compacting" )
File extensions.
const ( // IndexFile trailer fields IndexFileVersionSize = 2 SeriesBlockOffsetSize = 8 SeriesBlockSizeSize = 8 MeasurementBlockOffsetSize = 8 MeasurementBlockSizeSize = 8 IndexFileTrailerSize = IndexFileVersionSize + SeriesBlockOffsetSize + SeriesBlockSizeSize + MeasurementBlockOffsetSize + MeasurementBlockSizeSize )
IndexFile field size constants.
const ( LogEntrySeriesTombstoneFlag = 0x01 LogEntryMeasurementTombstoneFlag = 0x02 LogEntryTagKeyTombstoneFlag = 0x04 LogEntryTagValueTombstoneFlag = 0x08 )
Log entry flag constants.
const ( // 1 byte offset for the block to ensure non-zero offsets. MeasurementFillSize = 1 // Measurement trailer fields MeasurementTrailerSize = 0 + 2 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 8 // tombstone measurement sketch offset/size // Measurement key block fields. MeasurementNSize = 8 MeasurementOffsetSize = 8 )
Measurement field size constants.
const ( // Series list trailer field sizes. SeriesBlockTrailerSize = 0 + 4 + 4 + 4 + 4 + 4 + 8 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 4 + 0 // Other field sizes SeriesCountSize = 4 SeriesIDSize = 4 )
Series list field size constants.
const ( // Marks the series as having been deleted. SeriesTombstoneFlag = 0x01 // Marks the following bytes as a hash index. // These bytes should be skipped by an iterator. SeriesHashIndexFlag = 0x02 )
Series flag constants.
const ( // TagBlock key block fields. TagKeyNSize = 8 TagKeyOffsetSize = 8 // TagBlock value block fields. TagValueNSize = 8 TagValueOffsetSize = 8 )
TagBlock variable size constants.
const (
DefaultMaxLogFileSize = 5 * 1024 * 1024
)
Default compaction thresholds.
const FileSignature = "TSI1"
FileSignature represents a magic number at the header of the index file.
const IndexFileVersion = 1
IndexFileVersion is the current TSI1 index file version.
const LoadFactor = 80
LoadFactor is the fill percent for RHH indexes.
const ManifestFileName = "MANIFEST"
ManifestFileName is the name of the index manifest file.
const MaxIndexFileSize = 4 * (1 << 30)
MaxIndexFileSize is the maximum expected size of an index file.
const MaxIndexMergeCount = 2
MaxIndexMergeCount is the maximum number of files that can be merged together at once.
const MaxSeriesBlockHashSize = (1048576 * LoadFactor) / 100
MaxSeriesBlockHashSize is the maximum number of series in a single hash.
const MeasurementBlockVersion = 1
MeasurementBlockVersion is the version of the measurement block.
const (
MeasurementTombstoneFlag = 0x01
)
Measurement flag constants.
const TagBlockTrailerSize = 0 + 8 + 8 + 8 + 8 + 8 + 8 + 8 + 2 // version
TagBlockTrailerSize is the total size of the on-disk trailer.
const TagBlockVersion = 1
TagBlockVersion is the version of the tag block.
const (
TagKeyTombstoneFlag = 0x01
)
Tag key flag constants.
const (
TagValueTombstoneFlag = 0x01
)
Tag value flag constants.
Variables ¶
var ( ErrInvalidIndexFile = errors.New("invalid index file") ErrUnsupportedIndexFileVersion = errors.New("unsupported index file version") )
IndexFile errors.
var ( ErrUnsupportedMeasurementBlockVersion = errors.New("unsupported measurement block version") ErrMeasurementBlockSizeMismatch = errors.New("measurement block size mismatch") )
Measurement errors.
var ( ErrUnsupportedTagBlockVersion = errors.New("unsupported tag block version") ErrTagBlockSizeMismatch = errors.New("tag block size mismatch") )
TagBlock errors.
var DefaultCompactionLevels = []CompactionLevel{
{M: 0, K: 0},
{M: 1 << 25, K: 6},
{M: 1 << 25, K: 6},
{M: 1 << 26, K: 6},
{M: 1 << 27, K: 6},
{M: 1 << 28, K: 6},
{M: 1 << 29, K: 6},
{M: 1 << 30, K: 6},
}
DefaultCompactionLevels is the default settings used by the index.
var ErrIncompatibleVersion = errors.New("incompatible tsi1 index MANIFEST")
ErrIncompatibleVersion is returned when attempting to read from an incompatible tsi1 manifest file.
var (
ErrLogEntryChecksumMismatch = errors.New("log entry checksum mismatch")
)
Log errors.
var ErrSeriesOverflow = errors.New("series overflow")
ErrSeriesOverflow is returned when too many series are added to a series writer.
Functions ¶
func AppendSeriesElem ¶
AppendSeriesElem serializes flag/name/tags to dst and returns the new buffer.
func AppendSeriesKey ¶
AppendSeriesKey serializes name and tags to a byte slice. The total length is prepended as a uvarint.
func CompareSeriesElem ¶
func CompareSeriesElem(a, b SeriesElem) int
CompareSeriesElem returns -1 if a < b, 1 if a > b, and 0 if equal.
func CompareSeriesKeys ¶
func FormatIndexFileName ¶
FormatIndexFileName generates an index filename for the given index.
func FormatLogFileName ¶
FormatLogFileName generates a log filename for the given index.
func ParseFilename ¶
ParseFilename extracts the numeric id from a log or index file path. Returns 0 if it cannot be parsed.
func ReadSeriesKey ¶
ReadSeriesKey returns the series key from the beginning of the buffer.
func SeriesElemKey ¶
func SeriesElemKey(e SeriesElem) []byte
SeriesElemKey encodes e as a series key.
func WriteManifestFile ¶
WriteManifestFile writes a manifest to a file path.
Types ¶
type CompactionLevel ¶
type CompactionLevel struct { // Bloom filter bit size & hash count M uint64 `json:"m,omitempty"` K uint64 `json:"k,omitempty"` }
CompactionLevel represents a grouping of index files based on bloom filter settings. By having the same bloom filter settings, the filters can be merged and evaluated at a higher level.
type File ¶
type File interface { Close() error Path() string ID() int Level() int Measurement(name []byte) MeasurementElem MeasurementIterator() MeasurementIterator HasSeries(name []byte, tags models.Tags, buf []byte) (exists, tombstoned bool) Series(name []byte, tags models.Tags) SeriesElem SeriesN() uint64 TagKey(name, key []byte) TagKeyElem TagKeyIterator(name []byte) TagKeyIterator TagValue(name, key, value []byte) TagValueElem TagValueIterator(name, key []byte) TagValueIterator // Series iteration. SeriesIterator() SeriesIterator MeasurementSeriesIterator(name []byte) SeriesIterator TagKeySeriesIterator(name, key []byte) SeriesIterator TagValueSeriesIterator(name, key, value []byte) SeriesIterator // Sketches for cardinality estimation MergeSeriesSketches(s, t estimator.Sketch) error MergeMeasurementsSketches(s, t estimator.Sketch) error // Series existence bloom filter. Filter() *bloom.Filter // Reference counting. Retain() Release() }
File represents a log or index file.
type FileSet ¶
type FileSet struct {
// contains filtered or unexported fields
}
FileSet represents a collection of files.
func NewFileSet ¶
func NewFileSet(database string, levels []CompactionLevel, files []File) (*FileSet, error)
NewFileSet returns a new instance of FileSet.
func (*FileSet) FilterNamesTags ¶
func (fs *FileSet) FilterNamesTags(names [][]byte, tagsSlice []models.Tags) ([][]byte, []models.Tags)
FilterNamesTags filters out any series which already exist. It modifies the provided slices of names and tags.
func (*FileSet) HasTagValue ¶
HasTagValue returns true if the tag value exists.
func (*FileSet) IndexFiles ¶
IndexFiles returns all index files from the file set.
func (*FileSet) LastContiguousIndexFilesByLevel ¶
LastContiguousIndexFilesByLevel returns the last contiguous files by level. These can be used by the compaction scheduler.
func (*FileSet) MatchTagValueSeriesIterator ¶
func (fs *FileSet) MatchTagValueSeriesIterator(name, key []byte, value *regexp.Regexp, matches bool) SeriesIterator
MatchTagValueSeriesIterator returns a series iterator for tags which match value. If matches is false, returns iterators which do not match value.
func (*FileSet) Measurement ¶
func (fs *FileSet) Measurement(name []byte) MeasurementElem
Measurement returns a measurement by name.
func (*FileSet) MeasurementIterator ¶
func (fs *FileSet) MeasurementIterator() MeasurementIterator
MeasurementIterator returns an iterator over all measurements in the index.
func (*FileSet) MeasurementNamesByExpr ¶
func (*FileSet) MeasurementSeriesByExprIterator ¶
func (fs *FileSet) MeasurementSeriesByExprIterator(name []byte, expr influxql.Expr, fieldset *tsdb.MeasurementFieldSet) (SeriesIterator, error)
MeasurementSeriesByExprIterator returns a series iterator for a measurement that is filtered by expr. If expr only contains time expressions then this call is equivalent to MeasurementSeriesIterator().
func (*FileSet) MeasurementSeriesIterator ¶
func (fs *FileSet) MeasurementSeriesIterator(name []byte) SeriesIterator
MeasurementSeriesIterator returns an iterator over all non-tombstoned series in the index for the provided measurement.
func (*FileSet) MeasurementSeriesKeysByExpr ¶
func (fs *FileSet) MeasurementSeriesKeysByExpr(name []byte, expr influxql.Expr, fieldset *tsdb.MeasurementFieldSet) ([][]byte, error)
MeasurementSeriesKeysByExpr returns a list of series keys matching expr.
func (*FileSet) MeasurementTagKeysByExpr ¶
func (fs *FileSet) MeasurementTagKeysByExpr(name []byte, expr influxql.Expr) (map[string]struct{}, error)
MeasurementTagKeysByExpr extracts the tag keys wanted by the expression.
func (*FileSet) MeasurementsSketches ¶
MeasurementsSketches returns the merged measurement sketches for the FileSet.
func (*FileSet) MustReplace ¶
MustReplace swaps a list of files for a single file and returns a new file set. The caller should always guarantee that the files exist and are contiguous.
func (*FileSet) PrependLogFile ¶ added in v1.4.0
PrependLogFile returns a new file set with f added at the beginning. Filters do not need to be rebuilt because log files have no bloom filter.
func (*FileSet) Release ¶
func (fs *FileSet) Release()
Release removes a reference count from all files.
func (*FileSet) SeriesIterator ¶
func (fs *FileSet) SeriesIterator() SeriesIterator
SeriesIterator returns an iterator over all series in the index.
func (*FileSet) SeriesSketches ¶
SeriesSketches returns the merged series sketches for the FileSet.
func (*FileSet) TagKeyIterator ¶
func (fs *FileSet) TagKeyIterator(name []byte) TagKeyIterator
TagKeyIterator returns an iterator over all tag keys for a measurement.
func (*FileSet) TagKeySeriesIterator ¶
func (fs *FileSet) TagKeySeriesIterator(name, key []byte) SeriesIterator
TagKeySeriesIterator returns a series iterator for all values across a single key.
func (*FileSet) TagValueIterator ¶
func (fs *FileSet) TagValueIterator(name, key []byte) TagValueIterator
TagValueIterator returns a value iterator for a tag key.
func (*FileSet) TagValueSeriesIterator ¶
func (fs *FileSet) TagValueSeriesIterator(name, key, value []byte) SeriesIterator
TagValueSeriesIterator returns a series iterator for a single tag value.
type Index ¶
type Index struct { // Associated shard info. ShardID uint64 // Name of database. Database string // Root directory of the index files. Path string // Log file compaction thresholds. MaxLogFileSize int64 // Frequency of compaction checks. CompactionEnabled bool CompactionMonitorInterval time.Duration // contains filtered or unexported fields }
Index represents a collection of layered index files and WAL.
func (*Index) AssignShard ¶
func (*Index) CheckLogFile ¶
func (*Index) CreateSeriesIfNotExists ¶
CreateSeriesIfNotExists creates a series if it doesn't exist or is deleted.
func (*Index) CreateSeriesListIfNotExists ¶
CreateSeriesListIfNotExists creates a list of series if they doesn't exist in bulk.
func (*Index) DropMeasurement ¶
DropMeasurement deletes a measurement from the index.
func (*Index) DropSeries ¶
func (*Index) ForEachMeasurementName ¶
ForEachMeasurementName iterates over all measurement names in the index.
func (*Index) ForEachMeasurementTagKey ¶
ForEachMeasurementTagKey iterates over all tag keys in a measurement.
func (*Index) InitializeSeries ¶
InitializeSeries is a no-op. This only applies to the in-memory index.
func (*Index) ManifestPath ¶
ManifestPath returns the path to the index's manifest file.
func (*Index) MeasurementExists ¶
MeasurementExists returns true if a measurement exists.
func (*Index) MeasurementNamesByExpr ¶
func (*Index) MeasurementNamesByRegex ¶
func (*Index) MeasurementSeriesKeysByExpr ¶
MeasurementSeriesKeysByExpr returns a list of series keys matching expr.
func (*Index) MeasurementTagKeyValuesByExpr ¶ added in v1.3.2
func (i *Index) MeasurementTagKeyValuesByExpr(auth query.Authorizer, name []byte, keys []string, expr influxql.Expr, keysSorted bool) ([][]string, error)
MeasurementTagKeyValuesByExpr returns a set of tag values filtered by an expression.
See tsm1.Engine.MeasurementTagKeyValuesByExpr for a fuller description of this method.
func (*Index) MeasurementTagKeysByExpr ¶
func (i *Index) MeasurementTagKeysByExpr(name []byte, expr influxql.Expr) (map[string]struct{}, error)
MeasurementTagKeysByExpr extracts the tag keys wanted by the expression.
func (*Index) MeasurementsSketches ¶
MeasurementsSketches returns the two sketches for the index by merging all instances of the type sketch types in all the index files.
func (*Index) NextSequence ¶
NextSequence returns the next file identifier.
func (*Index) RemoveShard ¶
func (*Index) RetainFileSet ¶
RetainFileSet returns the current fileset and adds a reference count.
func (*Index) SeriesN ¶
SeriesN returns the number of unique non-tombstoned series in the index. Since indexes are not shared across shards, the count returned by SeriesN cannot be combined with other shard's results. If you need to count series across indexes then use SeriesSketches and merge the results from other indexes.
func (*Index) SeriesPointIterator ¶
SeriesPointIterator returns an influxql iterator over all series.
func (*Index) SeriesSketches ¶
SeriesSketches returns the two sketches for the index by merging all instances sketches from TSI files and the WAL.
func (*Index) SetFieldName ¶
func (*Index) SetFieldSet ¶
func (i *Index) SetFieldSet(fs *tsdb.MeasurementFieldSet)
SetFieldSet sets a shared field set from the engine.
func (*Index) SnapshotTo ¶
SnapshotTo creates hard links to the file set into path.
func (*Index) TagKeyCardinality ¶
TagKeyCardinality always returns zero. It is not possible to determine cardinality of tags across index files.
func (*Index) TagKeyHasAuthorizedSeries ¶ added in v1.4.3
TagKeyHasAuthorizedSeries determines if there exist authorized series for the provided measurement name and tag key.
func (*Index) TagSets ¶
TagSets returns an ordered list of tag sets for a measurement by dimension and filtered by an optional conditional expression.
func (*Index) Wait ¶ added in v1.3.8
func (i *Index) Wait()
Wait returns once outstanding compactions have finished.
func (*Index) WithLogger ¶
WithLogger sets the logger for the index.
type IndexFile ¶
type IndexFile struct {
// contains filtered or unexported fields
}
IndexFile represents a collection of measurement, tag, and series data.
func NewIndexFile ¶
func NewIndexFile() *IndexFile
NewIndexFile returns a new instance of IndexFile.
func (*IndexFile) Compacting ¶
Compacting returns true if the file is being compacted.
func (*IndexFile) HasSeries ¶
HasSeries returns flags indicating if the series exists and if it is tombstoned.
func (*IndexFile) Measurement ¶
func (f *IndexFile) Measurement(name []byte) MeasurementElem
Measurement returns a measurement element.
func (*IndexFile) MeasurementIterator ¶
func (f *IndexFile) MeasurementIterator() MeasurementIterator
MeasurementIterator returns an iterator over all measurements.
func (*IndexFile) MeasurementN ¶
MeasurementN returns the number of measurements in the file.
func (*IndexFile) MeasurementSeriesIterator ¶
func (f *IndexFile) MeasurementSeriesIterator(name []byte) SeriesIterator
MeasurementSeriesIterator returns an iterator over a measurement's series.
func (*IndexFile) MergeMeasurementsSketches ¶
MergeMeasurementsSketches merges the index file's series sketches into the provided sketches.
func (*IndexFile) MergeSeriesSketches ¶
MergeSeriesSketches merges the index file's series sketches into the provided sketches.
func (*IndexFile) Release ¶
func (f *IndexFile) Release()
Release removes a reference count from the file.
func (*IndexFile) Series ¶
func (f *IndexFile) Series(name []byte, tags models.Tags) SeriesElem
Series returns the series and a flag indicating if the series has been tombstoned by the measurement.
func (*IndexFile) SeriesIterator ¶
func (f *IndexFile) SeriesIterator() SeriesIterator
SeriesIterator returns an iterator over all series.
func (*IndexFile) SeriesN ¶
SeriesN returns the total number of non-tombstoned series for the index file.
func (*IndexFile) TagKey ¶
func (f *IndexFile) TagKey(name, key []byte) TagKeyElem
TagKey returns a tag key.
func (*IndexFile) TagKeyIterator ¶
func (f *IndexFile) TagKeyIterator(name []byte) TagKeyIterator
TagKeyIterator returns an iterator over all tag keys for a measurement.
func (*IndexFile) TagKeySeriesIterator ¶
func (f *IndexFile) TagKeySeriesIterator(name, key []byte) SeriesIterator
TagKeySeriesIterator returns a series iterator for a tag key and a flag indicating if a tombstone exists on the measurement or key.
func (*IndexFile) TagValue ¶
func (f *IndexFile) TagValue(name, key, value []byte) TagValueElem
TagValue returns a tag value.
func (*IndexFile) TagValueElem ¶
func (f *IndexFile) TagValueElem(name, key, value []byte) TagValueElem
TagValueElem returns an element for a measurement/tag/value.
func (*IndexFile) TagValueIterator ¶
func (f *IndexFile) TagValueIterator(name, key []byte) TagValueIterator
TagValueIterator returns a value iterator for a tag key and a flag indicating if a tombstone exists on the measurement or key.
func (*IndexFile) TagValueSeriesIterator ¶
func (f *IndexFile) TagValueSeriesIterator(name, key, value []byte) SeriesIterator
TagValueSeriesIterator returns a series iterator for a tag value and a flag indicating if a tombstone exists on the measurement, key, or value.
func (*IndexFile) UnmarshalBinary ¶
UnmarshalBinary opens an index from data. The byte slice is retained so it must be kept open.
type IndexFileTrailer ¶
type IndexFileTrailer struct { Version int SeriesBlock struct { Offset int64 Size int64 } MeasurementBlock struct { Offset int64 Size int64 } }
IndexFileTrailer represents meta data written to the end of the index file.
func ReadIndexFileTrailer ¶
func ReadIndexFileTrailer(data []byte) (IndexFileTrailer, error)
ReadIndexFileTrailer returns the index file trailer from data.
type IndexFiles ¶
type IndexFiles []*IndexFile
IndexFiles represents a layered set of index files.
func (IndexFiles) Files ¶
func (p IndexFiles) Files() []File
Files returns p as a list of File objects.
func (IndexFiles) MeasurementIterator ¶
func (p IndexFiles) MeasurementIterator() MeasurementIterator
MeasurementIterator returns an iterator that merges measurements across all files.
func (*IndexFiles) MeasurementNames ¶
func (p *IndexFiles) MeasurementNames() [][]byte
MeasurementNames returns a sorted list of all measurement names for all files.
func (IndexFiles) MeasurementSeriesIterator ¶
func (p IndexFiles) MeasurementSeriesIterator(name []byte) SeriesIterator
MeasurementSeriesIterator returns an iterator that merges series across all files.
func (IndexFiles) Release ¶
func (p IndexFiles) Release()
Release removes a reference count from all files.
func (IndexFiles) SeriesIterator ¶
func (p IndexFiles) SeriesIterator() SeriesIterator
SeriesIterator returns an iterator that merges series across all files.
func (IndexFiles) Stat ¶
func (p IndexFiles) Stat() (*IndexFilesInfo, error)
Stat returns the max index file size and the total file size for all index files.
func (*IndexFiles) TagKeyIterator ¶
func (p *IndexFiles) TagKeyIterator(name []byte) (TagKeyIterator, error)
TagKeyIterator returns an iterator that merges tag keys across all files.
func (IndexFiles) TagValueSeriesIterator ¶
func (p IndexFiles) TagValueSeriesIterator(name, key, value []byte) SeriesIterator
TagValueSeriesIterator returns an iterator that merges series across all files.
type IndexFilesInfo ¶
type LogEntry ¶
type LogEntry struct { Flag byte // flag Name []byte // measurement name Tags models.Tags // tagset Checksum uint32 // checksum of flag/name/tags. Size int // total size of record, in bytes. }
LogEntry represents a single log entry in the write-ahead log.
func (*LogEntry) UnmarshalBinary ¶
UnmarshalBinary unmarshals data into e.
type LogFile ¶
type LogFile struct {
// contains filtered or unexported fields
}
LogFile represents an on-disk write-ahead log file.
func NewLogFile ¶
NewLogFile returns a new instance of LogFile.
func (*LogFile) AddSeriesList ¶
AddSeriesList adds a list of series to the log file in bulk.
func (*LogFile) DeleteMeasurement ¶
DeleteMeasurement adds a tombstone for a measurement to the log file.
func (*LogFile) DeleteSeries ¶
DeleteSeries adds a tombstone for a series to the log file.
func (*LogFile) DeleteTagKey ¶
DeleteTagKey adds a tombstone for a tag key to the log file.
func (*LogFile) DeleteTagValue ¶
DeleteTagValue adds a tombstone for a tag value to the log file.
func (*LogFile) FilterNamesTags ¶
func (f *LogFile) FilterNamesTags(names [][]byte, tagsSlice []models.Tags) ([][]byte, []models.Tags)
FilterNamesTags filters out any series which already exist. It modifies the provided slices of names and tags.
func (*LogFile) HasSeries ¶
HasSeries returns flags indicating if the series exists and if it is tombstoned.
func (*LogFile) Measurement ¶
func (f *LogFile) Measurement(name []byte) MeasurementElem
Measurement returns a measurement element.
func (*LogFile) MeasurementIterator ¶
func (f *LogFile) MeasurementIterator() MeasurementIterator
MeasurementIterator returns an iterator over all the measurements in the file.
func (*LogFile) MeasurementN ¶
MeasurementN returns the total number of measurements.
func (*LogFile) MeasurementNames ¶
MeasurementNames returns an ordered list of measurement names.
func (*LogFile) MeasurementSeriesIterator ¶
func (f *LogFile) MeasurementSeriesIterator(name []byte) SeriesIterator
MeasurementSeriesIterator returns an iterator over all series for a measurement.
func (*LogFile) MergeMeasurementsSketches ¶
MergeMeasurementsSketches merges the measurement sketches belonging to this LogFile into the provided sketches.
MergeMeasurementsSketches is safe for concurrent use by multiple goroutines.
func (*LogFile) MergeSeriesSketches ¶
MergeSeriesSketches merges the series sketches belonging to this LogFile into the provided sketches.
MergeSeriesSketches is safe for concurrent use by multiple goroutines.
func (*LogFile) Release ¶
func (f *LogFile) Release()
Release removes a reference count from the file.
func (*LogFile) Series ¶
func (f *LogFile) Series(name []byte, tags models.Tags) SeriesElem
Series returns a series by name/tags.
func (*LogFile) SeriesIterator ¶
func (f *LogFile) SeriesIterator() SeriesIterator
SeriesIterator returns an iterator over all series in the log file.
func (*LogFile) SeriesWithBuffer ¶
SeriesWithBuffer returns a series by name/tags.
func (*LogFile) TagKey ¶
func (f *LogFile) TagKey(name, key []byte) TagKeyElem
TagKey returns a tag key element.
func (*LogFile) TagKeyIterator ¶
func (f *LogFile) TagKeyIterator(name []byte) TagKeyIterator
TagKeyIterator returns a value iterator for a measurement.
func (*LogFile) TagKeySeriesIterator ¶
func (f *LogFile) TagKeySeriesIterator(name, key []byte) SeriesIterator
TagKeySeriesIterator returns a series iterator for a tag key.
func (*LogFile) TagValue ¶
func (f *LogFile) TagValue(name, key, value []byte) TagValueElem
TagValue returns a tag value element.
func (*LogFile) TagValueIterator ¶
func (f *LogFile) TagValueIterator(name, key []byte) TagValueIterator
TagValueIterator returns a value iterator for a tag key.
func (*LogFile) TagValueSeriesIterator ¶
func (f *LogFile) TagValueSeriesIterator(name, key, value []byte) SeriesIterator
TagValueSeriesIterator returns a series iterator for a tag value.
type Manifest ¶
type Manifest struct { Levels []CompactionLevel `json:"levels,omitempty"` Files []string `json:"files,omitempty"` // Version should be updated whenever the TSI format has changed. Version int `json:"version,omitempty"` }
Manifest represents the list of log & index files that make up the index. The files are listed in time order, not necessarily ID order.
func NewManifest ¶
func NewManifest() *Manifest
NewManifest returns a new instance of Manifest with default compaction levels.
func ReadManifestFile ¶
ReadManifestFile reads a manifest from a file path.
type MeasurementBlock ¶
type MeasurementBlock struct {
// contains filtered or unexported fields
}
MeasurementBlock represents a collection of all measurements in an index.
func (*MeasurementBlock) Elem ¶
func (blk *MeasurementBlock) Elem(name []byte) (e MeasurementBlockElem, ok bool)
Elem returns an element for a measurement.
func (*MeasurementBlock) Iterator ¶
func (blk *MeasurementBlock) Iterator() MeasurementIterator
Iterator returns an iterator over all measurements.
func (*MeasurementBlock) UnmarshalBinary ¶
func (blk *MeasurementBlock) UnmarshalBinary(data []byte) error
UnmarshalBinary unpacks data into the block. Block is not copied so data should be retained and unchanged after being passed into this function.
func (*MeasurementBlock) Version ¶
func (blk *MeasurementBlock) Version() int
Version returns the encoding version parsed from the data. Only valid after UnmarshalBinary() has been successfully invoked.
type MeasurementBlockElem ¶
type MeasurementBlockElem struct {
// contains filtered or unexported fields
}
MeasurementBlockElem represents an internal measurement element.
func (*MeasurementBlockElem) Deleted ¶
func (e *MeasurementBlockElem) Deleted() bool
Deleted returns true if the tombstone flag is set.
func (*MeasurementBlockElem) Name ¶
func (e *MeasurementBlockElem) Name() []byte
Name returns the measurement name.
func (*MeasurementBlockElem) SeriesData ¶
func (e *MeasurementBlockElem) SeriesData() []byte
SeriesData returns the raw series data.
func (*MeasurementBlockElem) SeriesID ¶
func (e *MeasurementBlockElem) SeriesID(i int) uint32
SeriesID returns series ID at an index.
func (*MeasurementBlockElem) SeriesIDs ¶
func (e *MeasurementBlockElem) SeriesIDs() []uint32
SeriesIDs returns a list of decoded series ids.
NOTE: This should be used for testing and diagnostics purposes only. It requires loading the entire list of series in-memory.
func (*MeasurementBlockElem) SeriesN ¶
func (e *MeasurementBlockElem) SeriesN() uint32
SeriesN returns the number of series associated with the measurement.
func (*MeasurementBlockElem) Size ¶
func (e *MeasurementBlockElem) Size() int
Size returns the size of the element.
func (*MeasurementBlockElem) TagBlockOffset ¶
func (e *MeasurementBlockElem) TagBlockOffset() int64
TagBlockOffset returns the offset of the measurement's tag block.
func (*MeasurementBlockElem) TagBlockSize ¶
func (e *MeasurementBlockElem) TagBlockSize() int64
TagBlockSize returns the size of the measurement's tag block.
func (*MeasurementBlockElem) UnmarshalBinary ¶
func (e *MeasurementBlockElem) UnmarshalBinary(data []byte) error
UnmarshalBinary unmarshals data into e.
type MeasurementBlockTrailer ¶
type MeasurementBlockTrailer struct { Version int // Encoding version // Offset & size of data section. Data struct { Offset int64 Size int64 } // Offset & size of hash map section. HashIndex struct { Offset int64 Size int64 } // Offset and size of cardinality sketch for measurements. Sketch struct { Offset int64 Size int64 } // Offset and size of cardinality sketch for tombstoned measurements. TSketch struct { Offset int64 Size int64 } }
MeasurementBlockTrailer represents meta data at the end of a MeasurementBlock.
func ReadMeasurementBlockTrailer ¶
func ReadMeasurementBlockTrailer(data []byte) (MeasurementBlockTrailer, error)
ReadMeasurementBlockTrailer returns the block trailer from data.
type MeasurementBlockWriter ¶
type MeasurementBlockWriter struct {
// contains filtered or unexported fields
}
MeasurementBlockWriter writes a measurement block.
func NewMeasurementBlockWriter ¶
func NewMeasurementBlockWriter() *MeasurementBlockWriter
NewMeasurementBlockWriter returns a new MeasurementBlockWriter.
type MeasurementElem ¶
MeasurementElem represents a generic measurement element.
type MeasurementElems ¶
type MeasurementElems []MeasurementElem
MeasurementElems represents a list of MeasurementElem.
func (MeasurementElems) Len ¶
func (a MeasurementElems) Len() int
func (MeasurementElems) Less ¶
func (a MeasurementElems) Less(i, j int) bool
func (MeasurementElems) Swap ¶
func (a MeasurementElems) Swap(i, j int)
type MeasurementIterator ¶
type MeasurementIterator interface {
Next() MeasurementElem
}
MeasurementIterator represents a iterator over a list of measurements.
func FilterUndeletedMeasurementIterator ¶
func FilterUndeletedMeasurementIterator(itr MeasurementIterator) MeasurementIterator
FilterUndeletedMeasurementIterator returns an iterator which filters all deleted measurement.
func MergeMeasurementIterators ¶
func MergeMeasurementIterators(itrs ...MeasurementIterator) MeasurementIterator
MergeMeasurementIterators returns an iterator that merges a set of iterators. Iterators that are first in the list take precendence and a deletion by those early iterators will invalidate elements by later iterators.
type SeriesBlock ¶
type SeriesBlock struct {
// contains filtered or unexported fields
}
SeriesBlock represents the section of the index that holds series data.
func (*SeriesBlock) HasSeries ¶
func (blk *SeriesBlock) HasSeries(name []byte, tags models.Tags, buf []byte) (exists, tombstoned bool)
HasSeries returns flags indicating if the series exists and if it is tombstoned.
func (*SeriesBlock) Offset ¶
func (blk *SeriesBlock) Offset(name []byte, tags models.Tags, buf []byte) (offset uint32, tombstoned bool)
Offset returns the byte offset of the series within the block.
func (*SeriesBlock) Series ¶
func (blk *SeriesBlock) Series(name []byte, tags models.Tags) SeriesElem
Series returns a series element.
func (*SeriesBlock) SeriesCount ¶
func (blk *SeriesBlock) SeriesCount() uint32
SeriesCount returns the number of series.
func (*SeriesBlock) SeriesIterator ¶
func (blk *SeriesBlock) SeriesIterator() SeriesIterator
SeriesIterator returns an iterator over all the series.
func (*SeriesBlock) UnmarshalBinary ¶
func (blk *SeriesBlock) UnmarshalBinary(data []byte) error
UnmarshalBinary unpacks data into the series list.
If data is an mmap then it should stay open until the series list is no longer used because data access is performed directly from the byte slice.
type SeriesBlockElem ¶
type SeriesBlockElem struct {
// contains filtered or unexported fields
}
SeriesBlockElem represents a series element in the series list.
func (*SeriesBlockElem) Deleted ¶
func (e *SeriesBlockElem) Deleted() bool
Deleted returns true if the tombstone flag is set.
func (*SeriesBlockElem) Expr ¶
func (e *SeriesBlockElem) Expr() influxql.Expr
Expr always returns a nil expression. This is only used by higher level query planning.
func (*SeriesBlockElem) Name ¶
func (e *SeriesBlockElem) Name() []byte
Name returns the measurement name.
func (*SeriesBlockElem) Tags ¶
func (e *SeriesBlockElem) Tags() models.Tags
Tags returns the tag set.
func (*SeriesBlockElem) UnmarshalBinary ¶
func (e *SeriesBlockElem) UnmarshalBinary(data []byte) error
UnmarshalBinary unmarshals data into e.
type SeriesBlockEncoder ¶
type SeriesBlockEncoder struct {
// contains filtered or unexported fields
}
SeriesBlockEncoder encodes series to a SeriesBlock in an underlying writer.
func NewSeriesBlockEncoder ¶
func NewSeriesBlockEncoder(w io.Writer, n uint32, m, k uint64) *SeriesBlockEncoder
NewSeriesBlockEncoder returns a new instance of SeriesBlockEncoder.
func (*SeriesBlockEncoder) Close ¶
func (enc *SeriesBlockEncoder) Close() error
Close writes the index and trailer. This should be called at the end once all series have been encoded.
func (*SeriesBlockEncoder) Encode ¶
Encode writes a series to the underlying writer. The series must be lexicographical sorted after the previous encoded series.
func (*SeriesBlockEncoder) N ¶
func (enc *SeriesBlockEncoder) N() int64
N returns the number of bytes written.
type SeriesBlockTrailer ¶
type SeriesBlockTrailer struct { Series struct { Data struct { Offset int32 Size int32 } Index struct { Offset int32 Size int32 N int32 } } // Bloom filter info. Bloom struct { K uint64 Offset int32 Size int32 } // Offset and size of cardinality sketch for measurements. Sketch struct { Offset int32 Size int32 } // Offset and size of cardinality sketch for tombstoned measurements. TSketch struct { Offset int32 Size int32 } SeriesN int32 TombstoneN int32 }
SeriesBlockTrailer represents meta data written to the end of the series list.
func ReadSeriesBlockTrailer ¶
func ReadSeriesBlockTrailer(data []byte) SeriesBlockTrailer
ReadSeriesBlockTrailer returns the series list trailer from data.
type SeriesElem ¶
type SeriesElem interface { Name() []byte Tags() models.Tags Deleted() bool // InfluxQL expression associated with series during filtering. Expr() influxql.Expr }
SeriesElem represents a generic series element.
type SeriesIterator ¶
type SeriesIterator interface {
Next() SeriesElem
}
SeriesIterator represents a iterator over a list of series.
func DifferenceSeriesIterators ¶
func DifferenceSeriesIterators(itr0, itr1 SeriesIterator) SeriesIterator
DifferenceSeriesIterators returns an iterator that only returns series which occur the first iterator but not the second iterator.
func FilterUndeletedSeriesIterator ¶
func FilterUndeletedSeriesIterator(itr SeriesIterator) SeriesIterator
FilterUndeletedSeriesIterator returns an iterator which filters all deleted series.
func IntersectSeriesIterators ¶
func IntersectSeriesIterators(itr0, itr1 SeriesIterator) SeriesIterator
IntersectSeriesIterators returns an iterator that only returns series which occur in both iterators. If both series have associated expressions then they are combined together.
func MergeSeriesIterators ¶
func MergeSeriesIterators(itrs ...SeriesIterator) SeriesIterator
MergeSeriesIterators returns an iterator that merges a set of iterators. Iterators that are first in the list take precendence and a deletion by those early iterators will invalidate elements by later iterators.
func UnionSeriesIterators ¶
func UnionSeriesIterators(itr0, itr1 SeriesIterator) SeriesIterator
UnionSeriesIterators returns an iterator that returns series from both both iterators. If both series have associated expressions then they are combined together.
type TagBlock ¶
type TagBlock struct {
// contains filtered or unexported fields
}
TagBlock represents tag key/value block for a single measurement.
func (*TagBlock) TagKeyElem ¶
func (blk *TagBlock) TagKeyElem(key []byte) TagKeyElem
TagKeyElem returns an element for a tag key. Returns an element with a nil key if not found.
func (*TagBlock) TagKeyIterator ¶
func (blk *TagBlock) TagKeyIterator() TagKeyIterator
TagKeyIterator returns an iterator over all the keys in the block.
func (*TagBlock) TagValueElem ¶
func (blk *TagBlock) TagValueElem(key, value []byte) TagValueElem
TagValueElem returns an element for a tag value.
func (*TagBlock) UnmarshalBinary ¶
UnmarshalBinary unpacks data into the tag block. Tag block is not copied so data should be retained and unchanged after being passed into this function.
type TagBlockEncoder ¶
type TagBlockEncoder struct {
// contains filtered or unexported fields
}
TagBlockEncoder encodes a tags to a TagBlock section.
func NewTagBlockEncoder ¶
func NewTagBlockEncoder(w io.Writer) *TagBlockEncoder
NewTagBlockEncoder returns a new TagBlockEncoder.
func (*TagBlockEncoder) Close ¶
func (enc *TagBlockEncoder) Close() error
Close flushes the trailer of the encoder to the writer.
func (*TagBlockEncoder) EncodeKey ¶
func (enc *TagBlockEncoder) EncodeKey(key []byte, deleted bool) error
EncodeKey writes a tag key to the underlying writer.
func (*TagBlockEncoder) EncodeValue ¶
func (enc *TagBlockEncoder) EncodeValue(value []byte, deleted bool, seriesIDs []uint32) error
EncodeValue writes a tag value to the underlying writer. The tag key must be lexicographical sorted after the previous encoded tag key.
func (*TagBlockEncoder) N ¶
func (enc *TagBlockEncoder) N() int64
N returns the number of bytes written.
type TagBlockKeyElem ¶
type TagBlockKeyElem struct {
// contains filtered or unexported fields
}
TagBlockKeyElem represents a tag key element in a TagBlock.
func (*TagBlockKeyElem) Deleted ¶
func (e *TagBlockKeyElem) Deleted() bool
Deleted returns true if the key has been tombstoned.
func (*TagBlockKeyElem) Key ¶
func (e *TagBlockKeyElem) Key() []byte
Key returns the key name of the element.
func (*TagBlockKeyElem) TagValueIterator ¶
func (e *TagBlockKeyElem) TagValueIterator() TagValueIterator
TagValueIterator returns an iterator over the key's values.
type TagBlockTrailer ¶
type TagBlockTrailer struct { Version int // Encoding version Size int64 // Total size w/ trailer // Offset & size of value data section. ValueData struct { Offset int64 Size int64 } // Offset & size of key data section. KeyData struct { Offset int64 Size int64 } // Offset & size of hash map section. HashIndex struct { Offset int64 Size int64 } }
TagBlockTrailer represents meta data at the end of a TagBlock.
func ReadTagBlockTrailer ¶
func ReadTagBlockTrailer(data []byte) (TagBlockTrailer, error)
ReadTagBlockTrailer returns the tag block trailer from data.
type TagBlockValueElem ¶
type TagBlockValueElem struct {
// contains filtered or unexported fields
}
TagBlockValueElem represents a tag value element.
func (*TagBlockValueElem) Deleted ¶
func (e *TagBlockValueElem) Deleted() bool
Deleted returns true if the element has been tombstoned.
func (*TagBlockValueElem) SeriesData ¶
func (e *TagBlockValueElem) SeriesData() []byte
SeriesData returns the raw series data.
func (*TagBlockValueElem) SeriesID ¶
func (e *TagBlockValueElem) SeriesID(i int) uint32
SeriesID returns series ID at an index.
func (*TagBlockValueElem) SeriesIDs ¶
func (e *TagBlockValueElem) SeriesIDs() []uint32
SeriesIDs returns a list decoded series ids.
func (*TagBlockValueElem) SeriesN ¶
func (e *TagBlockValueElem) SeriesN() uint32
SeriesN returns the series count.
func (*TagBlockValueElem) Size ¶
func (e *TagBlockValueElem) Size() int
Size returns the size of the element.
func (*TagBlockValueElem) Value ¶
func (e *TagBlockValueElem) Value() []byte
Value returns the value for the element.
type TagKeyElem ¶
type TagKeyElem interface { Key() []byte Deleted() bool TagValueIterator() TagValueIterator }
TagKeyElem represents a generic tag key element.
type TagKeyIterator ¶
type TagKeyIterator interface {
Next() TagKeyElem
}
TagKeyIterator represents a iterator over a list of tag keys.
func MergeTagKeyIterators ¶
func MergeTagKeyIterators(itrs ...TagKeyIterator) TagKeyIterator
MergeTagKeyIterators returns an iterator that merges a set of iterators. Iterators that are first in the list take precendence and a deletion by those early iterators will invalidate elements by later iterators.
type TagValueElem ¶
TagValueElem represents a generic tag value element.
type TagValueIterator ¶
type TagValueIterator interface {
Next() TagValueElem
}
TagValueIterator represents a iterator over a list of tag values.
func MergeTagValueIterators ¶
func MergeTagValueIterators(itrs ...TagValueIterator) TagValueIterator
MergeTagValueIterators returns an iterator that merges a set of iterators. Iterators that are first in the list take precendence and a deletion by those early iterators will invalidate elements by later iterators.