lib/storage: skip non-matching metricIDs in sortedFilter

This should improve performance for big sorteFilter lists.
This commit is contained in:
Aliaksandr Valialkin 2019-06-29 13:48:29 +03:00
parent 2257dcd278
commit ffc1bb00f6

View file

@ -1727,6 +1727,15 @@ func (is *indexSearch) updateMetricIDsForOrSuffixWithFilter(prefix []byte, metri
}
metricID := encoding.UnmarshalUint64(v)
if metricID != nextMetricID {
// Skip metricIDs smaller than the found metricID, since they don't
// match anything.
if len(sortedFilter) > 0 && metricID > sortedFilter[0] {
sortedFilter = sortedFilter[1:]
n := sort.Search(len(sortedFilter), func(i int) bool {
return metricID <= sortedFilter[i]
})
sortedFilter = sortedFilter[n:]
}
continue
}
if isNegative {