10225501448 李度 10225101546 陈胤遒 10215501422 高宇菲
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 

56 lignes
1.5 KiB

#pragma once
#include <cstdint>
#include <cstdio>
#include "leveldb/slice.h"
#include "leveldb/write_batch.h"
#include "util/serialize_value.h"
#include "fielddb/field_db.h"
namespace fielddb {
using namespace leveldb;
/*根据写入的流程可以推断,需要存在metaDB中的数据其实都是带索引的数据,也就是FieldArray*/
// class MetaKV {
// MetaKV(Slice &Key,FieldArray Fields):
// Key(Key),Fields(Fields),tag(0),meta_seq(0) { }
// inline int get_seq() { return meta_seq; }
// inline void set_seq(int meta_seq) { this->meta_seq = meta_seq; }
// inline void setPut() { tag = PUT; }
// inline void setDelete() { tag = DELETE; }
// Slice metaKey();
// Slice metaValue();
// private:
// enum {PUT = 0x0,DELETE = 0x1};
// uint64_t meta_seq;
// uint8_t tag;
// Slice &Key;
// FieldArray Fields;
// };
enum MetaType {
//Index, //记录index状态的meta
KV_Creating, //记录含有index field的put的meta
KV_Deleting,
};
//将一对(field_name,field_value)转换到metaDB中的KV表示
class MetaKV {
public:
MetaKV(std::string *field_name,std::string *field_value = nullptr):
name(field_name),value(field_value) { }
void TransPut(std::string &MetaKey,std::string &MetaValue);
void TransDelete(std::string &MetaKey);
private:
std::string *name;
std::string *value;
};
class MetaCleaner {
public:
MetaCleaner() = default;
void Collect(WriteBatch &MetaBatch);
void CleanMetaBatch(DB *metaDB);
private:
WriteBatch NeedClean;
};
}