BaseKV 抽象层¶
概述¶
BaseKV 是所有 KV 引擎的抽象基类,定义了统一的存储接口。位于 storage/kv_engine/base_kv.h。
核心接口¶
class BaseKV {
virtual void Get(uint64_t key, string& value, unsigned tid) = 0;
virtual void Put(uint64_t key, string_view& value, unsigned tid) = 0;
virtual void BatchGet(ConstArray<uint64_t> keys,
vector<ConstArray<float>>* values,
unsigned tid) = 0;
virtual void BatchPut(coroutine<void>::push_type& sink,
ConstArray<uint64_t> keys,
vector<ConstArray<float>>* values,
unsigned tid);
};
方法说明¶
| 方法 | 参数 | 说明 |
|---|---|---|
| Get | key, value, tid | 读取单个键值对 |
| Put | key, value_view, tid | 写入单个键值对 |
| BatchGet | keys, values, tid | 批量读取 |
| BatchPut | sink, keys, values, tid | 批量写入(协程) |
参数说明:
- tid - 线程 ID,用于线程安全的内存管理
- sink - 协程 push_type,支持大批量数据的分批处理
- ConstArray - 只读数组视图,避免数据拷贝
- MutableArray - 可写数组视图
配置结构¶
BaseKVConfig¶
配置字段¶
必填字段(非 HYBRID)
| 字段 | 类型 | 说明 |
|---|---|---|
| path | string | 工作目录 |
| index_type | string | "DRAM" 或 "SSD" |
| value_type | string | "DRAM" 或 "SSD" |
| capacity | uint64_t | 预估条目数 |
| value_size | int | 每个值的字节数 |
必填字段(HYBRID)
| 字段 | 类型 | 说明 |
|---|---|---|
| path | string | 工作目录 |
| index_type | string | "DRAM" 或 "SSD" |
| value_type | string | "HYBRID" |
| shmcapacity | uint64_t | DRAM 字节数 |
| ssdcapacity | uint64_t | SSD 字节数 |
可选字段
| 字段 | 默认值 | 说明 |
|---|---|---|
| value_memory_management | "PersistLoopShmMalloc" | 内存管理器类型 |
引擎选择机制¶
通过 base::ResolveEngine(config) 根据配置自动选择引擎:
引擎选择规则:
| index_type | value_type | 选择的引擎 |
|---|---|---|
| DRAM | SSD | KVEngineExtendibleHash |
| SSD | SSD | KVEngineCCEH |
| DRAM/SSD | HYBRID | KVEngineHybrid |
工厂创建¶
使用工厂模式创建引擎实例:
std::unique_ptr<BaseKV> kv(
base::Factory<BaseKV, const BaseKVConfig&>::NewInstance(
engine_type, config
)
);
线程安全¶
BaseKV 通过 tid 参数实现线程安全:
- 每个线程有独立的 tid
- 内存管理器根据 tid 使用独立的数据结构
- 避免锁竞争,提高并发性能
依赖¶
使用 BaseKV 前需要:
1. #include "storage/kv_engine/engine_factory.h" - 注册所有引擎
2. #include "memory/memory_factory.h" - 注册所有内存管理器