mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-21 14:44:00 +00:00
lib/storage: do not compress small number of tsids when storing them in tagFiltersCache
This speeds up tsids retreival from the cache for 0-2 tsids
This commit is contained in:
parent
de6dd1cd5a
commit
78520f2702
1 changed files with 29 additions and 3 deletions
|
@ -322,11 +322,22 @@ func (db *indexDB) getFromTagFiltersCache(qt *querytracer.Tracer, key []byte) ([
|
|||
qt.Printf("cache miss")
|
||||
return nil, false
|
||||
}
|
||||
if compressedBuf.B[0] == 0 {
|
||||
// Fast path - tsids are stored in uncompressed form.
|
||||
qt.Printf("found tsids with size: %d bytes", len(compressedBuf.B))
|
||||
tsids, err := unmarshalTSIDs(nil, compressedBuf.B[1:])
|
||||
if err != nil {
|
||||
logger.Panicf("FATAL: cannot unmarshal tsids from tagFiltersCache: %s", err)
|
||||
}
|
||||
qt.Printf("unmarshaled %d tsids", len(tsids))
|
||||
return tsids, true
|
||||
}
|
||||
// Slow path - tsids are stored in compressed form.
|
||||
qt.Printf("found tsids with compressed size: %d bytes", len(compressedBuf.B))
|
||||
buf := tagBufPool.Get()
|
||||
defer tagBufPool.Put(buf)
|
||||
var err error
|
||||
buf.B, err = encoding.DecompressZSTD(buf.B[:0], compressedBuf.B)
|
||||
buf.B, err = encoding.DecompressZSTD(buf.B[:0], compressedBuf.B[1:])
|
||||
if err != nil {
|
||||
logger.Panicf("FATAL: cannot decompress tsids from tagFiltersCache: %s", err)
|
||||
}
|
||||
|
@ -344,15 +355,30 @@ var tagBufPool bytesutil.ByteBufferPool
|
|||
func (db *indexDB) putToTagFiltersCache(qt *querytracer.Tracer, tsids []TSID, key []byte) {
|
||||
qt = qt.NewChild("put %d tsids in cache", len(tsids))
|
||||
defer qt.Done()
|
||||
if len(tsids) <= 2 {
|
||||
// Fast path - store small number of tsids in uncompressed form.
|
||||
// This saves CPU time on compress / decompress.
|
||||
buf := tagBufPool.Get()
|
||||
buf.B = append(buf.B[:0], 0)
|
||||
buf.B = marshalTSIDs(buf.B, tsids)
|
||||
qt.Printf("marshaled %d tsids into %d bytes", len(tsids), len(buf.B))
|
||||
db.tagFiltersCache.SetBig(key, buf.B)
|
||||
qt.Printf("store %d tsids into cache", len(tsids))
|
||||
tagBufPool.Put(buf)
|
||||
return
|
||||
}
|
||||
// Slower path - store big number of tsids in compressed form.
|
||||
// This increases cache capacity.
|
||||
buf := tagBufPool.Get()
|
||||
buf.B = marshalTSIDs(buf.B[:0], tsids)
|
||||
qt.Printf("marshaled %d tsids into %d bytes", len(tsids), len(buf.B))
|
||||
compressedBuf := tagBufPool.Get()
|
||||
compressedBuf.B = encoding.CompressZSTDLevel(compressedBuf.B[:0], buf.B, 1)
|
||||
compressedBuf.B = append(compressedBuf.B[:0], 1)
|
||||
compressedBuf.B = encoding.CompressZSTDLevel(compressedBuf.B, buf.B, 1)
|
||||
qt.Printf("compressed %d tsids into %d bytes", len(tsids), len(compressedBuf.B))
|
||||
tagBufPool.Put(buf)
|
||||
db.tagFiltersCache.SetBig(key, compressedBuf.B)
|
||||
qt.Printf("store %d compressed tsids into cache", len(tsids))
|
||||
qt.Printf("stored %d compressed tsids into cache", len(tsids))
|
||||
tagBufPool.Put(compressedBuf)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue