Skip to content

Commit

Permalink
enhance: remove useless memory copies on type conversion during sync …
Browse files Browse the repository at this point in the history
…operations (milvus-io#39703)

See: milvus-io#39697

In sync operations, the type conversions from message to insert data
always result in a memory copy, which is not necessary if the converting
type is identical.

Signed-off-by: Ted Xu <[email protected]>
  • Loading branch information
tedxu authored Feb 10, 2025
1 parent ee87e4d commit 3c8acbc
Showing 1 changed file with 23 additions and 23 deletions.
46 changes: 23 additions & 23 deletions internal/storage/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -546,7 +546,7 @@ func ColumnBasedInsertMsgToInsertData(msg *msgstream.InsertMsg, collSchema *sche

srcData := srcField.GetVectors().GetFloatVector().GetData()
fieldData = &FloatVectorFieldData{
Data: lo.Map(srcData, func(v float32, _ int) float32 { return v }),
Data: srcData,
Dim: dim,
}

Expand All @@ -560,7 +560,7 @@ func ColumnBasedInsertMsgToInsertData(msg *msgstream.InsertMsg, collSchema *sche
srcData := srcField.GetVectors().GetBinaryVector()

fieldData = &BinaryVectorFieldData{
Data: lo.Map(srcData, func(v byte, _ int) byte { return v }),
Data: srcData,
Dim: dim,
}

Expand All @@ -574,7 +574,7 @@ func ColumnBasedInsertMsgToInsertData(msg *msgstream.InsertMsg, collSchema *sche
srcData := srcField.GetVectors().GetFloat16Vector()

fieldData = &Float16VectorFieldData{
Data: lo.Map(srcData, func(v byte, _ int) byte { return v }),
Data: srcData,
Dim: dim,
}

Expand All @@ -588,7 +588,7 @@ func ColumnBasedInsertMsgToInsertData(msg *msgstream.InsertMsg, collSchema *sche
srcData := srcField.GetVectors().GetBfloat16Vector()

fieldData = &BFloat16VectorFieldData{
Data: lo.Map(srcData, func(v byte, _ int) byte { return v }),
Data: srcData,
Dim: dim,
}

Expand All @@ -615,8 +615,8 @@ func ColumnBasedInsertMsgToInsertData(msg *msgstream.InsertMsg, collSchema *sche
validData := srcField.GetValidData()

fieldData = &BoolFieldData{
Data: lo.Map(srcData, func(v bool, _ int) bool { return v }),
ValidData: lo.Map(validData, func(v bool, _ int) bool { return v }),
Data: srcData,
ValidData: validData,
}

case schemapb.DataType_Int8:
Expand All @@ -625,7 +625,7 @@ func ColumnBasedInsertMsgToInsertData(msg *msgstream.InsertMsg, collSchema *sche

fieldData = &Int8FieldData{
Data: lo.Map(srcData, func(v int32, _ int) int8 { return int8(v) }),
ValidData: lo.Map(validData, func(v bool, _ int) bool { return v }),
ValidData: validData,
}

case schemapb.DataType_Int16:
Expand All @@ -634,23 +634,23 @@ func ColumnBasedInsertMsgToInsertData(msg *msgstream.InsertMsg, collSchema *sche

fieldData = &Int16FieldData{
Data: lo.Map(srcData, func(v int32, _ int) int16 { return int16(v) }),
ValidData: lo.Map(validData, func(v bool, _ int) bool { return v }),
ValidData: validData,
}

case schemapb.DataType_Int32:
srcData := srcField.GetScalars().GetIntData().GetData()
validData := srcField.GetValidData()

fieldData = &Int32FieldData{
Data: lo.Map(srcData, func(v int32, _ int) int32 { return v }),
ValidData: lo.Map(validData, func(v bool, _ int) bool { return v }),
Data: srcData,
ValidData: validData,
}

case schemapb.DataType_Int64:
switch field.FieldID {
case common.RowIDField: // rowIDs
fieldData = &Int64FieldData{
Data: lo.Map(msg.GetRowIDs(), func(v int64, _ int) int64 { return v }),
Data: msg.GetRowIDs(),
}
case common.TimeStampField: // Timestamps
fieldData = &Int64FieldData{
Expand All @@ -660,8 +660,8 @@ func ColumnBasedInsertMsgToInsertData(msg *msgstream.InsertMsg, collSchema *sche
srcData := srcField.GetScalars().GetLongData().GetData()
validData := srcField.GetValidData()
fieldData = &Int64FieldData{
Data: lo.Map(srcData, func(v int64, _ int) int64 { return v }),
ValidData: lo.Map(validData, func(v bool, _ int) bool { return v }),
Data: srcData,
ValidData: validData,
}
}

Expand All @@ -670,26 +670,26 @@ func ColumnBasedInsertMsgToInsertData(msg *msgstream.InsertMsg, collSchema *sche
validData := srcField.GetValidData()

fieldData = &FloatFieldData{
Data: lo.Map(srcData, func(v float32, _ int) float32 { return v }),
ValidData: lo.Map(validData, func(v bool, _ int) bool { return v }),
Data: srcData,
ValidData: validData,
}

case schemapb.DataType_Double:
srcData := srcField.GetScalars().GetDoubleData().GetData()
validData := srcField.GetValidData()

fieldData = &DoubleFieldData{
Data: lo.Map(srcData, func(v float64, _ int) float64 { return v }),
ValidData: lo.Map(validData, func(v bool, _ int) bool { return v }),
Data: srcData,
ValidData: validData,
}

case schemapb.DataType_String, schemapb.DataType_VarChar:
srcData := srcField.GetScalars().GetStringData().GetData()
validData := srcField.GetValidData()

fieldData = &StringFieldData{
Data: lo.Map(srcData, func(v string, _ int) string { return v }),
ValidData: lo.Map(validData, func(v bool, _ int) bool { return v }),
Data: srcData,
ValidData: validData,
}

case schemapb.DataType_Array:
Expand All @@ -698,17 +698,17 @@ func ColumnBasedInsertMsgToInsertData(msg *msgstream.InsertMsg, collSchema *sche

fieldData = &ArrayFieldData{
ElementType: field.GetElementType(),
Data: lo.Map(srcData, func(v *schemapb.ScalarField, _ int) *schemapb.ScalarField { return v }),
ValidData: lo.Map(validData, func(v bool, _ int) bool { return v }),
Data: srcData,
ValidData: validData,
}

case schemapb.DataType_JSON:
srcData := srcField.GetScalars().GetJsonData().GetData()
validData := srcField.GetValidData()

fieldData = &JSONFieldData{
Data: lo.Map(srcData, func(v []byte, _ int) []byte { return v }),
ValidData: lo.Map(validData, func(v bool, _ int) bool { return v }),
Data: srcData,
ValidData: validData,
}

default:
Expand Down

0 comments on commit 3c8acbc

Please sign in to comment.