embedded_secondary-index
的 LevelDB
实现及实验LevelDB 是一个高性能的持久化键值存储引擎,提供简单的 API
用于高效的读写操作。然而,传统 LevelDB
仅支持基于主键的快速查询,而无法直接支持对二级属性的查询需求。在许多场景(如搜索系统或复杂索引系统)中,需要支持高效的二级索引查询。
本实验计划基于 embedded_secondary-index
的设计扩展了 LevelDB
,支持通过嵌入式布隆过滤器实现的二级索引查询,并引入了 Top-K 查询功能以提升二级属性查询的实用性和效率。
LevelDB
扩展版本。本实验采用 embedded_secondary-index
的实现方式,将二级索引嵌入到 LevelDB
的原有数据结构中。以下是系统的核心设计:
MemTable
:
SSTable
:
SSTable
包含多个数据块(存储键值对)、元数据块(记录索引信息)和布隆过滤器块(分别用于主键和二级属性的快速过滤)。SSTable
中,避免额外的索引文件。SSTable
和数据块。sequence_number
(插入顺序)排序,最终返回最近的 K 条记录。MemTable
查询;SSTable
。LevelDB
的源码以支持二级索引嵌入:
SSTable
数据块结构,增加布隆过滤器支持;Write
和 Flush
流程,嵌入二级索引信息。API
:
RangeLookUp
和 Top-K LookUp
)。数据准备:
生成包含主键和二级属性的模拟数据集。
数据格式示例:
{
"primary_key": "id12345",
"secondary_key": "tag123",
"value": "This is a test record."
}
测试指标:
QPS
)。测试工具: 计划使用 Benchmark 工具测量数据库的吞吐量与延迟。
下面提供一些建议的结构图,可以清晰说明基于 embedded_secondary-index
的设计和实现,适合配合实验报告使用:
图示内容
展示 embedded_secondary-index
的整体设计,包括主键、二级属性的存储方式,以及布隆过滤器与 SSTable
的嵌入关系。
图示结构
SSTable
的元数据块中,避免外部索引文件的开销。SSTable
,只访问可能的匹配块。图示内容
描述写入数据时如何解析主键和二级属性,并更新布隆过滤器和 SSTable
的流程。
图示结构
图示内容 展示基于二级属性查询的具体步骤,包括布隆过滤器筛选、块访问和结果返回。
图示结构
SSTable
,通过小顶堆实现 Top-K 的排序与记录收集,保证查询的效率。SSTable
布局示意图图示内容
展示 SSTable
内部如何组织主键、二级属性和布隆过滤器的布局。
图示结构
SSTable
包含数据块(Data Blocks)、元数据块(Meta Block)和布隆过滤器块(Bloom Filter Blocks)。图示内容
以小顶堆为核心,说明查询结果如何按照时间顺序(sequence_number
)进行排序。
图示结构