姚凯文 姜嘉琪
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
姚凯文 e37274ca11 上传文件至 '' 1ヶ月前
benchmarks init the repo with base 删除 1ヶ月前
cmake init the repo with base 删除 1ヶ月前
db init the repo with base 删除 1ヶ月前
doc init the repo with base 删除 1ヶ月前
helpers/memenv init the repo with base 删除 1ヶ月前
include/leveldb init the repo with base 删除 1ヶ月前
issues init the repo with base 删除 1ヶ月前
port init the repo with base 删除 1ヶ月前
table init the repo with base 删除 1ヶ月前
test init the repo with base 删除 1ヶ月前
third_party init the repo with base 删除 1ヶ月前
util init the repo with base 删除 1ヶ月前
.clang-format init the repo with base 1ヶ月前
.gitignore init the repo with base 1ヶ月前
.gitmodules init the repo with base 1ヶ月前
AUTHORS init the repo with base 1ヶ月前
CMakeLists.txt init the repo with base 1ヶ月前
CONTRIBUTING.md init the repo with base 1ヶ月前
LICENSE init the repo with base 1ヶ月前
NEWS init the repo with base 1ヶ月前
README.md Update README.md 1ヶ月前
Scheme.md 上传文件至 '' 1ヶ月前
Scheme.pdf 上传文件至 '' 1ヶ月前
Structure1.svg 上传文件至 '' 1ヶ月前
Structure2.svg 上传文件至 '' 1ヶ月前
Structure3.svg 上传文件至 '' 1ヶ月前
Structure4.svg 上传文件至 '' 1ヶ月前
Structure5.svg 上传文件至 '' 1ヶ月前
TODO init the repo with base 1ヶ月前

README.md

实验计划说明报告:基于 embedded_secondary-indexLevelDB 实现及实验


1. 实验背景

LevelDB 是一个高性能的持久化键值存储引擎,提供简单的 API 用于高效的读写操作。然而,传统 LevelDB 仅支持基于主键的快速查询,而无法直接支持对二级属性的查询需求。在许多场景(如搜索系统或复杂索引系统)中,需要支持高效的二级索引查询。

本实验计划基于 embedded_secondary-index 的设计扩展了 LevelDB,支持通过嵌入式布隆过滤器实现的二级索引查询,并引入了 Top-K 查询功能以提升二级属性查询的实用性和效率。


2. 实验目标

  • 实现一个支持二级索引查询的 LevelDB 扩展版本。
  • 验证嵌入式二级索引的设计在读写性能和查询效率上的优越性。
  • 测试支持二级索引查询的数据库在 Top-K 查询功能上的性能表现。

3. 系统设计

本实验采用 embedded_secondary-index 的实现方式,将二级索引嵌入到 LevelDB 的原有数据结构中。以下是系统的核心设计:

3.1 数据结构设计
  1. MemTable
    • 在内存中维护主键与二级属性的数据映射关系。
    • 对二级属性构建布隆过滤器以提高查询效率。
  2. SSTable
    • 每个 SSTable 包含多个数据块(存储键值对)、元数据块(记录索引信息)和布隆过滤器块(分别用于主键和二级属性的快速过滤)。
    • 数据写入磁盘时,布隆过滤器被嵌入到 SSTable 中,避免额外的索引文件。
  3. 布隆过滤器
    • 对每个数据块的二级属性计算布隆过滤器位串。
    • 通过内存中加载的布隆过滤器快速筛选可能包含目标数据的块,减少磁盘 IO。
3.2 查询算法设计
  1. Top-K 查询
    • 查询时,先通过布隆过滤器筛选出可能的 SSTable 和数据块。
    • 使用小顶堆保存查询结果,根据 sequence_number(插入顺序)排序,最终返回最近的 K 条记录。
  2. 层次化查询流程
    • 优先从 MemTable 查询;
    • 若未命中,则逐层遍历 SSTable

4. 实验步骤

4.1 系统实现
  1. 修改 LevelDB 的源码以支持二级索引嵌入:
    • 更新 SSTable 数据块结构,增加布隆过滤器支持;
    • 修改 WriteFlush 流程,嵌入二级索引信息。
  2. 扩展数据库的 API
    • 实现二级索引的查询接口(RangeLookUpTop-K LookUp)。
  3. 使用 Google Test 编写单元测试,验证功能正确性。
4.2 计划性能测试
  1. 数据准备

    • 生成包含主键和二级属性的模拟数据集。

    • 数据格式示例:

      { 
        "primary_key": "id12345",
        "secondary_key": "tag123",
        "value": "This is a test record."
      }
      
  2. 测试指标

    • 数据写入性能(QPS)。
    • 基于二级属性的查询性能:
      • 单次查询耗时;
      • 不同 Top-K 参数下的查询性能;
    • 对比嵌入式二级索引与传统外部索引在查询性能上的表现。
  3. 测试工具: 计划使用 Benchmark 工具测量数据库的吞吐量与延迟。


5. 附录:系统结构图

  1. 下面提供一些建议的结构图,可以清晰说明基于 embedded_secondary-index 的设计和实现,适合配合实验报告使用:


    1. 系统整体架构图

    图示内容 展示 embedded_secondary-index 的整体设计,包括主键、二级属性的存储方式,以及布隆过滤器与 SSTable 的嵌入关系。

    图示结构

    error

    • 要点说明:
      1. 二级索引与布隆过滤器紧密嵌入 SSTable 的元数据块中,避免外部索引文件的开销。
      2. 查询时,通过布隆过滤器快速过滤非相关 SSTable,只访问可能的匹配块。

2. 数据写入流程图

图示内容 描述写入数据时如何解析主键和二级属性,并更新布隆过滤器和 SSTable 的流程。

图示结构

error

  • 要点说明: 写入过程中,自动解析主键和二级属性,实时更新布隆过滤器,确保写入操作高效完成。

3. 数据查询流程图

图示内容 展示基于二级属性查询的具体步骤,包括布隆过滤器筛选、块访问和结果返回。

图示结构

error

  • 要点说明: 布隆过滤器用于筛选目标 SSTable,通过小顶堆实现 Top-K 的排序与记录收集,保证查询的效率。

4. SSTable 布局示意图

图示内容 展示 SSTable 内部如何组织主键、二级属性和布隆过滤器的布局。

图示结构

error

  • 要点说明:
    1. 每个 SSTable 包含数据块(Data Blocks)、元数据块(Meta Block)和布隆过滤器块(Bloom Filter Blocks)。
    2. 二级属性的布隆过滤器和主键布隆过滤器分别存储,提供不同维度的快速索引。

5. Top-K 查询堆排序示意图

图示内容 以小顶堆为核心,说明查询结果如何按照时间顺序(sequence_number)进行排序。

图示结构

error

  • 要点说明: 查询过程中,维护一个固定大小的小顶堆,仅保留最近的 K 条记录,大幅提高排序效率。