MemManager.h 2.6 KB
Newer Older
X
Xu Peng 已提交
1 2 3 4 5 6
/*******************************************************************************
 * Copyright 上海赜睿信息科技有限公司(Zilliz) - All Rights Reserved
 * Unauthorized copying of this file, via any medium is strictly prohibited.
 * Proprietary and confidential.
 ******************************************************************************/
#pragma once
7 8 9

#include <map>
#include <string>
X
Xu Peng 已提交
10
#include <ctime>
X
Xu Peng 已提交
11 12
#include <memory>
#include <mutex>
X
Xu Peng 已提交
13 14
#include "IDGenerator.h"
#include "Status.h"
X
Xu Peng 已提交
15
#include "Meta.h"
16 17


X
Xu Peng 已提交
18 19 20
namespace zilliz {
namespace vecwise {
namespace engine {
21

22 23 24 25
namespace meta {
    class Meta;
}

26
template <typename EngineT>
27 28
class MemVectors {
public:
X
Xu Peng 已提交
29
    typedef typename EngineT::Ptr EnginePtr;
X
Xu Peng 已提交
30
    typedef typename meta::Meta::Ptr MetaPtr;
31
    typedef std::shared_ptr<MemVectors<EngineT>> Ptr;
X
Xu Peng 已提交
32

X
Xu Peng 已提交
33 34
    explicit MemVectors(const std::shared_ptr<meta::Meta>&,
            const meta::GroupFileSchema&, const Options&);
35

X
Xu Peng 已提交
36
    void add(size_t n_, const float* vectors_, IDNumbers& vector_ids_);
37 38 39 40 41

    size_t total() const;

    size_t approximate_size() const;

42
    Status serialize(std::string& group_id);
43 44 45

    ~MemVectors();

X
Xu Peng 已提交
46
    const std::string& location() const { return schema_.location; }
X
Xu Peng 已提交
47

48
private:
X
Xu Peng 已提交
49 50 51 52
    MemVectors() = delete;
    MemVectors(const MemVectors&) = delete;
    MemVectors& operator=(const MemVectors&) = delete;

X
Xu Peng 已提交
53
    MetaPtr pMeta_;
X
Xu Peng 已提交
54 55
    Options options_;
    meta::GroupFileSchema schema_;
56
    IDGenerator* _pIdGenerator;
X
Xu Peng 已提交
57
    EnginePtr pEE_;
58 59 60 61

}; // MemVectors


62

63
template<typename EngineT>
64 65
class MemManager {
public:
X
Xu Peng 已提交
66
    typedef typename meta::Meta::Ptr MetaPtr;
67 68
    typedef typename MemVectors<EngineT>::Ptr MemVectorsPtr;
    typedef std::shared_ptr<MemManager<EngineT>> Ptr;
69

X
Xu Peng 已提交
70 71
    MemManager(const std::shared_ptr<meta::Meta>& meta_, const Options& options)
        : _pMeta(meta_), options_(options) {}
72

73
    MemVectorsPtr get_mem_by_group(const std::string& group_id_);
74

75 76 77
    Status add_vectors(const std::string& group_id_,
            size_t n_, const float* vectors_, IDNumbers& vector_ids_);

78
    Status serialize(std::vector<std::string>& group_ids);
X
Xu Peng 已提交
79

80
private:
81 82
    Status add_vectors_no_lock(const std::string& group_id_,
            size_t n_, const float* vectors_, IDNumbers& vector_ids_);
X
Xu Peng 已提交
83
    Status mark_memory_as_immutable();
84

85 86
    typedef std::map<std::string, MemVectorsPtr> MemMap;
    typedef std::vector<MemVectorsPtr> ImmMemPool;
87
    MemMap _memMap;
X
Xu Peng 已提交
88
    ImmMemPool _immMems;
X
Xu Peng 已提交
89
    MetaPtr _pMeta;
X
Xu Peng 已提交
90
    Options options_;
X
Xu Peng 已提交
91
    std::mutex _mutex;
X
Xu Peng 已提交
92
    std::mutex serialization_mtx_;
93 94 95
}; // MemManager


X
Xu Peng 已提交
96 97 98
} // namespace engine
} // namespace vecwise
} // namespace zilliz
99
#include "MemManager.cpp"