From cf19e90af396e18f27877e2394db4aa7845faa3e Mon Sep 17 00:00:00 2001 From: Xu Peng Date: Tue, 30 Apr 2019 15:19:17 +0800 Subject: [PATCH] feat(db): add serializer Former-commit-id: ab412bbb430e7711ddee0ad26b34f7b3b6c43582 --- cpp/src/db/FaissSerializer.cpp | 24 ++++++++++++++++++++++++ cpp/src/db/FaissSerializer.h | 28 ++++++++++++++++++++++++++++ cpp/src/db/Serializer.cpp | 21 +++++++++++++++++++++ cpp/src/db/Serializer.h | 23 +++++++++++++++++++++++ 4 files changed, 96 insertions(+) create mode 100644 cpp/src/db/FaissSerializer.cpp create mode 100644 cpp/src/db/FaissSerializer.h create mode 100644 cpp/src/db/Serializer.cpp create mode 100644 cpp/src/db/Serializer.h diff --git a/cpp/src/db/FaissSerializer.cpp b/cpp/src/db/FaissSerializer.cpp new file mode 100644 index 0000000000..6bc8b487a1 --- /dev/null +++ b/cpp/src/db/FaissSerializer.cpp @@ -0,0 +1,24 @@ +#include +#include + +#include "FaissSerializer.h" + +namespace zilliz { +namespace vecwise { +namespace engine { + +const std::string IndexType = "IDMap,Flat"; + +FaissSerializer::FaissSerializer(uint16_t dimension) + : pIndex_(faiss::index_factory(dimension, IndexType.c_str())) { +} + +bool FaissSerializer::AddWithIds(long n, const float *xdata, const long *xids) { + pIndex_->add_with_ids(n, xdata, xids); + return true; +} + + +} // namespace engine +} // namespace vecwise +} // namespace zilliz diff --git a/cpp/src/db/FaissSerializer.h b/cpp/src/db/FaissSerializer.h new file mode 100644 index 0000000000..fa13dad0a1 --- /dev/null +++ b/cpp/src/db/FaissSerializer.h @@ -0,0 +1,28 @@ +#pragma once + +#include +#include + +#include "Serializer.h" + +namespace faiss { + class Index; +} + +namespace zilliz { +namespace vecwise { +namespace engine { + +class FaissSerializer : public Serializer { +public: + FaissSerializer(uint16_t dimension); + virtual bool AddWithIds(long n, const float *xdata, const long *xids) override; + +protected: + std::shared_ptr pIndex_; +}; + + +} // namespace engine +} // namespace vecwise +} // namespace zilliz diff --git a/cpp/src/db/Serializer.cpp b/cpp/src/db/Serializer.cpp new file mode 100644 index 0000000000..5a60defd50 --- /dev/null +++ b/cpp/src/db/Serializer.cpp @@ -0,0 +1,21 @@ +#include +#include "Serializer.h" + +namespace zilliz { +namespace vecwise { +namespace engine { + +bool Serializer::AddWithIds(const std::vector& vectors, const std::vector& vector_ids) { + long n1 = (long)vectors.size(); + long n2 = (long)vector_ids.size(); + if (n1 != n2) { + LOG(ERROR) << "vectors size is not equal to the size of vector_ids: " << n1 << "!=" << n2; + return false; + } + return AddWithIds(n1, vectors.data(), vector_ids.data()); +} + + +} // namespace engine +} // namespace vecwise +} // namespace zilliz diff --git a/cpp/src/db/Serializer.h b/cpp/src/db/Serializer.h new file mode 100644 index 0000000000..b7760fe9bc --- /dev/null +++ b/cpp/src/db/Serializer.h @@ -0,0 +1,23 @@ +#pragma once + +#include + +namespace zilliz { +namespace vecwise { +namespace engine { + +class Serializer { +public: + + bool AddWithIds(const std::vector& vectors, + const std::vector& vector_ids); + + virtual bool AddWithIds(long n, const float *xdata, const long *xids) = 0; + + virtual ~Serializer() {} +}; + + +} // namespace engine +} // namespace vecwise +} // namespace zilliz