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 0c88afa386
commit 2ecb117082

View file

@ -1678,6 +1678,15 @@ func (is *indexSearch) updateMetricIDsForOrSuffixWithFilter(prefix []byte, metri
} }
metricID := encoding.UnmarshalUint64(v) metricID := encoding.UnmarshalUint64(v)
if metricID != nextMetricID { 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 continue
} }
if isNegative { if isNegative {