diff --git a/cpp/src/db/memvectors.cpp b/cpp/src/db/memvectors.cpp index 0dc019b733447ed0ba329ee4a7f9951b764bc513..2bafe3a9de4b2d8716237081708383bbd0a3b3d9 100644 --- a/cpp/src/db/memvectors.cpp +++ b/cpp/src/db/memvectors.cpp @@ -2,6 +2,8 @@ #include #include #include +#include +#include #include "memvectors.h" #include "db_meta.h" @@ -12,7 +14,7 @@ namespace vecwise { namespace engine { MemVectors::MemVectors(size_t dimension_, const std::string& file_location_) : - _file_location(file_location_.c_str()), + _file_location(file_location_), _pIdGenerator(new SimpleIDGenerator()), _dimension(dimension_), _pInnerIndex(new faiss::IndexFlat(_dimension)), @@ -20,8 +22,11 @@ MemVectors::MemVectors(size_t dimension_, const std::string& file_location_) : } void MemVectors::add(size_t n_, const float* vectors_, IDNumbers& vector_ids_) { - vector_ids_ = _pIdGenerator->getNextIDNumbers(n_); + _pIdGenerator->getNextIDNumbers(n_, vector_ids_); _pIdMapIndex->add_with_ids(n_, vectors_, &vector_ids_[0]); + for(auto i=0 ; igetNextIDNumber(); */ + /* faiss::write_index(_pIdMapIndex, ss.str().c_str()); */ + /* std::cout << _pIdMapIndex->ntotal << std::endl; */ + /* std::cout << _file_location << std::endl; */ + faiss::write_index(_pIdMapIndex, _file_location.c_str()); } MemVectors::~MemVectors() { @@ -66,6 +76,7 @@ VectorsPtr MemManager::get_mem_by_group(const std::string& group_id) { if (!status.ok()) { return nullptr; } + _memMap[group_id] = std::shared_ptr(new MemVectors(group_info.dimension, group_info.next_file_location)); return _memMap[group_id]; @@ -83,7 +94,7 @@ Status MemManager::add_vectors_no_lock(const std::string& group_id, size_t n, const float* vectors, IDNumbers& vector_ids) { - auto mem = get_mem_by_group(group_id); + std::shared_ptr mem = get_mem_by_group(group_id); if (mem == nullptr) { return Status::NotFound("Group " + group_id + " not found!"); } @@ -97,6 +108,7 @@ Status MemManager::mark_memory_as_immutable() { for (auto& kv: _memMap) { _immMems.push_back(kv.second); } + _memMap.clear(); return Status::OK(); } diff --git a/cpp/src/db/memvectors.h b/cpp/src/db/memvectors.h index f60f37af88651e67c2732b0497c58e9bcf8442d3..f9a0bba1f223252a2fe41607300f47d20444379d 100644 --- a/cpp/src/db/memvectors.h +++ b/cpp/src/db/memvectors.h @@ -33,8 +33,14 @@ public: ~MemVectors(); + const std::string& location() const { return _file_location; } + private: - const char* _file_location; + MemVectors() = delete; + MemVectors(const MemVectors&) = delete; + MemVectors& operator=(const MemVectors&) = delete; + + const std::string _file_location; IDGenerator* _pIdGenerator; size_t _dimension; faiss::Index* _pInnerIndex; @@ -49,7 +55,7 @@ typedef std::shared_ptr VectorsPtr; class MemManager { public: MemManager(const std::shared_ptr& meta_) - : _pMeta(meta_), _last_compact_time(std::time(nullptr)) {} + : _pMeta(meta_) /*_last_compact_time(std::time(nullptr))*/ {} VectorsPtr get_mem_by_group(const std::string& group_id_); @@ -68,7 +74,7 @@ private: MemMap _memMap; ImmMemPool _immMems; std::shared_ptr _pMeta; - std::time_t _last_compact_time; + /* std::time_t _last_compact_time; */ std::mutex _mutex; }; // MemManager