From 5264144ddbdfdcb641658f557f39802bb050bd5a Mon Sep 17 00:00:00 2001 From: "yudong.cai" Date: Fri, 23 Aug 2019 11:27:21 +0800 Subject: [PATCH] optimize grpc insert Former-commit-id: 1f9d5ee34055303208c48e745d1252ae3c0b60a8 --- cpp/src/server/grpc_impl/GrpcRequestTask.cpp | 30 ++++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/cpp/src/server/grpc_impl/GrpcRequestTask.cpp b/cpp/src/server/grpc_impl/GrpcRequestTask.cpp index db96ad62..36462e4d 100644 --- a/cpp/src/server/grpc_impl/GrpcRequestTask.cpp +++ b/cpp/src/server/grpc_impl/GrpcRequestTask.cpp @@ -428,20 +428,21 @@ InsertTask::OnExecute() { // TODO: change to one dimension array in protobuf or use multiple-thread to copy the data for (size_t i = 0; i < insert_param_.row_record_array_size(); i++) { - for (size_t j = 0; j < table_info.dimension_; j++) { - if (insert_param_.row_record_array(i).vector_data().empty()) { - return SetError(SERVER_INVALID_ROWRECORD_ARRAY, "Row record float array is empty"); - } - uint64_t vec_dim = insert_param_.row_record_array(i).vector_data().size(); - if (vec_dim != table_info.dimension_) { - ServerError error_code = SERVER_INVALID_VECTOR_DIMENSION; - std::string error_msg = "Invalid rowrecord dimension: " + std::to_string(vec_dim) - + " vs. table dimension:" + - std::to_string(table_info.dimension_); - return SetError(error_code, error_msg); - } - vec_f[i * table_info.dimension_ + j] = insert_param_.row_record_array(i).vector_data(j); + if (insert_param_.row_record_array(i).vector_data().empty()) { + return SetError(SERVER_INVALID_ROWRECORD_ARRAY, "Row record float array is empty"); + } + uint64_t vec_dim = insert_param_.row_record_array(i).vector_data().size(); + if (vec_dim != table_info.dimension_) { + ServerError error_code = SERVER_INVALID_VECTOR_DIMENSION; + std::string error_msg = "Invalid rowrecord dimension: " + std::to_string(vec_dim) + + " vs. table dimension:" + + std::to_string(table_info.dimension_); + return SetError(error_code, error_msg); } + + memcpy(&vec_f[i * table_info.dimension_], + insert_param_.row_record_array(i).vector_data().data(), + table_info.dimension_ * sizeof(float)); } rc.ElapseFromBegin("prepare vectors data"); @@ -453,8 +454,7 @@ InsertTask::OnExecute() { vec_ids[i] = insert_param_.row_id_array(i); } - stat = DBWrapper::DB()->InsertVectors(insert_param_.table_name(), vec_count, vec_f.data(), - vec_ids); + stat = DBWrapper::DB()->InsertVectors(insert_param_.table_name(), vec_count, vec_f.data(), vec_ids); rc.ElapseFromBegin("add vectors to engine"); if (!stat.ok()) { return SetError(SERVER_CACHE_ERROR, "Cache error: " + stat.ToString()); -- GitLab