milvus/cpp/src/db/DBImpl.h
Xu Peng 06ab815c7b feat(db): add count api
Former-commit-id: 9fb2b765a48d1753ba31a68e7b9b207273adb199
2019-04-24 10:28:05 +08:00

83 lines
2.2 KiB
C++

#pragma once
#include <mutex>
#include <condition_variable>
#include <memory>
#include <atomic>
#include "DB.h"
#include "MemManager.h"
#include "Types.h"
namespace zilliz {
namespace vecwise {
namespace engine {
class Env;
namespace meta {
class Meta;
}
class DBImpl : public DB {
public:
DBImpl(const Options& options);
virtual Status add_group(meta::GroupSchema& group_info) override;
virtual Status get_group(meta::GroupSchema& group_info) override;
virtual Status has_group(const std::string& group_id_, bool& has_or_not_) override;
virtual Status get_group_files(const std::string& group_id_,
const int date_delta_,
meta::GroupFilesSchema& group_files_info_) override;
virtual Status add_vectors(const std::string& group_id_,
size_t n, const float* vectors, IDNumbers& vector_ids_) override;
virtual Status search(const std::string& group_id, size_t k, size_t nq,
const float* vectors, QueryResults& results) override;
virtual Status drop_all() override;
virtual Status count(const std::string& group_id, long& result) override;
virtual ~DBImpl();
private:
void background_build_index();
Status build_index(const meta::GroupFileSchema&);
Status try_build_index();
Status merge_files(const std::string& group_id,
const meta::DateT& date,
const meta::GroupFilesSchema& files);
Status background_merge_files(const std::string& group_id);
void try_schedule_compaction();
void start_timer_task(int interval_);
void background_timer_task(int interval_);
static void BGWork(void* db);
void background_call();
void background_compaction();
Env* const _env;
const Options _options;
std::mutex _mutex;
std::condition_variable _bg_work_finish_signal;
bool _bg_compaction_scheduled;
Status _bg_error;
std::atomic<bool> _shutting_down;
std::mutex build_index_mutex_;
bool bg_build_index_started_;
std::condition_variable bg_build_index_finish_signal_;
std::shared_ptr<meta::Meta> _pMeta;
std::shared_ptr<MemManager> _pMemMgr;
}; // DBImpl
} // namespace engine
} // namespace vecwise
} // namespace zilliz