enhance: Optimize grow slice cost during query (#34254)

issue: #32252
pr: #34253

This PR try to pre-allocate FieldData for Reduce operations in the Query
chain using typeutil.PrepareResultFieldData to avoid the overhead of
dynamically growing the slice during appendFieldData process.

---------

Signed-off-by: Wei Liu <wei.liu@zilliz.com>
pull/34302/head
wei liu 2024-07-01 15:18:11 +08:00 committed by GitHub
parent 06d9d258c4
commit c344083f22
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 3 additions and 2 deletions

View File

@ -603,7 +603,6 @@ func reduceRetrieveResults(ctx context.Context, retrieveResults []*internalpb.Re
return ret, nil
}
ret.FieldsData = make([]*schemapb.FieldData, len(validRetrieveResults[0].GetFieldsData()))
idSet := make(map[interface{}]struct{})
cursors := make([]int64, len(validRetrieveResults))
@ -626,6 +625,7 @@ func reduceRetrieveResults(ctx context.Context, retrieveResults []*internalpb.Re
}
}
ret.FieldsData = typeutil.PrepareResultFieldData(validRetrieveResults[0].GetFieldsData(), int64(loopEnd))
var retSize int64
maxOutputSize := paramtable.Get().QuotaConfig.MaxOutputSize.GetAsInt64()
for j := 0; j < loopEnd; {

View File

@ -427,7 +427,7 @@ func MergeInternalRetrieveResult(ctx context.Context, retrieveResults []*interna
loopEnd = int(param.limit)
}
ret.FieldsData = make([]*schemapb.FieldData, len(validRetrieveResults[0].Result.GetFieldsData()))
ret.FieldsData = typeutil.PrepareResultFieldData(validRetrieveResults[0].Result.GetFieldsData(), int64(loopEnd))
idTsMap := make(map[interface{}]int64)
cursors := make([]int64, len(validRetrieveResults))
@ -556,6 +556,7 @@ func MergeSegcoreRetrieveResults(ctx context.Context, retrieveResults []*segcore
limit = int(param.limit)
}
ret.FieldsData = typeutil.PrepareResultFieldData(validRetrieveResults[0].Result.GetFieldsData(), int64(loopEnd))
cursors := make([]int64, len(validRetrieveResults))
idTsMap := make(map[any]int64)