0
0

firestorm use the ParseKey() funcs to avoid unneeded value parsing

With this change, the row allocation also happens only once per loop,
instead of once per item.
This commit is contained in:
Steve Yen 2016-01-06 15:53:12 -08:00
parent 009d59222a
commit 7df07f94fa
3 changed files with 8 additions and 4 deletions

View File

@ -135,9 +135,10 @@ func (gc *GarbageCollector) cleanup() {
termFreqStart := TermFreqIteratorStart(0, []byte{ByteSeparator})
termFreqEnd := TermFreqIteratorStart(math.MaxUint16, []byte{ByteSeparator})
var tfr TermFreqRow
dictionaryDeltas := make(map[string]int64)
err = visitRange(reader, termFreqStart, termFreqEnd, func(key, val []byte) (bool, error) {
tfr, err := NewTermFreqRowKV(key, val)
err := tfr.ParseKey(key)
if err != nil {
return false, err
}
@ -158,8 +159,9 @@ func (gc *GarbageCollector) cleanup() {
}
// walk all the stored rows
var sr StoredRow
err = visitPrefix(reader, StoredKeyPrefix, func(key, val []byte) (bool, error) {
sr, err := NewStoredRowKV(key, val)
err := sr.ParseKey(key)
if err != nil {
return false, err
}

View File

@ -91,10 +91,11 @@ func (l *Lookuper) lookup(item *InFlightItem) {
prefix := TermFreqPrefixFieldTermDocId(0, nil, item.docID)
logger.Printf("lookuper prefix - % x", prefix)
var tfk TermFreqRow
docNums := make(DocNumberList, 0)
err = visitPrefix(reader, prefix, func(key, val []byte) (bool, error) {
logger.Printf("lookuper sees key % x", key)
tfk, err := NewTermFreqRowKV(key, val)
err := tfk.ParseKey(key)
if err != nil {
return false, err
}

View File

@ -67,10 +67,11 @@ func (f *Firestorm) warmup(reader store.KVReader) error {
tfkPrefix := TermFreqIteratorStart(idField, nil)
var tfk TermFreqRow
var lastDocId []byte
lastDocNumbers := make(DocNumberList, 1)
err = visitPrefix(reader, tfkPrefix, func(key, val []byte) (bool, error) {
tfk, err := NewTermFreqRowKV(key, val)
err := tfk.ParseKey(key)
if err != nil {
return false, err
}