From d416d1c6fc09df7f5ef537d1559734931fe16e3a Mon Sep 17 00:00:00 2001 From: "yudong.cai" Date: Thu, 22 Aug 2019 19:16:49 +0800 Subject: [PATCH 1/2] opt metrics Former-commit-id: 3455b1ffc9d401e8e689c5833fb5e1985b3dc7b5 --- cpp/src/metrics/Metrics.cpp | 25 +++++++++---------------- cpp/src/metrics/Metrics.h | 18 ++++-------------- 2 files changed, 13 insertions(+), 30 deletions(-) diff --git a/cpp/src/metrics/Metrics.cpp b/cpp/src/metrics/Metrics.cpp index 925bb4cd5c..23fb0a15b8 100644 --- a/cpp/src/metrics/Metrics.cpp +++ b/cpp/src/metrics/Metrics.cpp @@ -3,36 +3,29 @@ * Unauthorized copying of this file, via any medium is strictly prohibited. * Proprietary and confidential. ******************************************************************************/ - - #include "Metrics.h" #include "PrometheusMetrics.h" + namespace zilliz { namespace milvus { namespace server { MetricsBase & -Metrics::CreateMetricsCollector(MetricCollectorType collector_type) { - switch (collector_type) { - case MetricCollectorType::PROMETHEUS: - static PrometheusMetrics instance = PrometheusMetrics::GetInstance(); - return instance; - default:return MetricsBase::GetInstance(); - } +Metrics::GetInstance() { + static MetricsBase &instance = CreateMetricsCollector(); + return instance; } MetricsBase & -Metrics::GetInstance() { +Metrics::CreateMetricsCollector() { ConfigNode &config = ServerConfig::GetInstance().GetConfig(CONFIG_METRIC); - std::string collector_typr_str = config.GetValue(CONFIG_METRIC_COLLECTOR); + std::string collector_type_str = config.GetValue(CONFIG_METRIC_COLLECTOR); - if (collector_typr_str == "prometheus") { - return CreateMetricsCollector(MetricCollectorType::PROMETHEUS); - } else if (collector_typr_str == "zabbix") { - return CreateMetricsCollector(MetricCollectorType::ZABBIX); + if (collector_type_str == "prometheus") { + return PrometheusMetrics::GetInstance(); } else { - return CreateMetricsCollector(MetricCollectorType::INVALID); + return MetricsBase::GetInstance(); } } diff --git a/cpp/src/metrics/Metrics.h b/cpp/src/metrics/Metrics.h index be796eb9c4..65df7140cc 100644 --- a/cpp/src/metrics/Metrics.h +++ b/cpp/src/metrics/Metrics.h @@ -5,22 +5,14 @@ ******************************************************************************/ #pragma once -#include "utils/Error.h" -#include -#include - - -#pragma once - #include "MetricBase.h" -//#include "PrometheusMetrics.h" + namespace zilliz { namespace milvus { namespace server { #define METRICS_NOW_TIME std::chrono::system_clock::now() -//#define server::Metrics::GetInstance() server::Metrics::GetInstance() #define METRICS_MICROSECONDS(a, b) (std::chrono::duration_cast (b-a)).count(); enum class MetricCollectorType { @@ -31,15 +23,13 @@ enum class MetricCollectorType { class Metrics { public: - static MetricsBase & - CreateMetricsCollector(MetricCollectorType collector_type); + static MetricsBase &GetInstance(); - static MetricsBase & - GetInstance(); + private: + static MetricsBase &CreateMetricsCollector(); }; - } } } From 5264144ddbdfdcb641658f557f39802bb050bd5a Mon Sep 17 00:00:00 2001 From: "yudong.cai" Date: Fri, 23 Aug 2019 11:27:21 +0800 Subject: [PATCH 2/2] 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 db96ad6202..36462e4d06 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());