MiniOB 项目实验指南:C++ 基础与布隆过滤器实现

MiniOB 项目实验指南:C++ 基础与布隆过滤器实现

miniob MiniOB is a compact database that assists developers in understanding the fundamental workings of a database. miniob 项目地址: https://gitcode.com/gh_mirrors/mi/miniob

实验概述

本实验是 MiniOB 数据库系统的入门实验,旨在帮助学习者掌握 C++ 编程基础,特别是通过实现布隆过滤器来熟悉 MiniOB 的开发环境和编码规范。实验包含两部分内容:C++ 小练习(Cpplings)和布隆过滤器实现任务。

C++ 小练习(Cpplings)

这部分练习不计入实验成绩,但强烈建议完成,因为它能帮助你:

  1. 熟悉 C++ 基本语法和特性
  2. 了解 MiniOB 项目中的编码风格
  3. 为后续数据库实现实验打下基础

练习内容位于 src/cpplings/README.md 中,包含多个小任务,涵盖 C++ 的核心概念。

布隆过滤器实现任务

布隆过滤器原理

布隆过滤器是一种空间效率极高的概率型数据结构,用于判断一个元素是否存在于集合中。其核心特点包括:

  1. 空间效率:使用位数组存储信息,空间占用远小于传统数据结构
  2. 查询效率:查询时间为常数 O(k),k 为哈希函数数量
  3. 概率特性:可能存在误报(false positive),但不会漏报(false negative)

工作原理示意图:

   ┌─┐             
 ┌─┼M┼───┐ ┌─┐     
 │ └─┴─┐ ├─┼T┼─┐   
 │     │ │ └─┤ │   
 │     │ │   │ │   
┌▼┬─┬─┬▼┬▼┬─┬▼┬▼┬─┐
│1│0│0│1│1│0│1│1│0│
└─┴─┴─┴─┴─┴─┴─┴─┴─┘

实现要求

src/oblsm/util/ob_bloomfilter.h 文件中实现 ObBloomFilter 类,需要完成以下核心方法:

  1. insert 方法:将元素插入布隆过滤器

    • 需要支持并发访问
    • 使用多个哈希函数计算元素位置
    • 将对应位数组位置设为1
  2. contains 方法:检查元素是否存在

    • 需要支持并发访问
    • 检查所有哈希函数对应的位是否都为1
    • 返回判断结果
  3. clear 方法:清空过滤器

    • 将所有位重置为0

并发实现建议

实现并发访问时可以考虑以下方案:

  1. 基于锁的实现

    • 使用互斥锁(mutex)保护位数组
    • 简单易实现,但可能影响性能
  2. 无锁实现

    • 使用原子操作(atomic)处理位数组
    • 性能更高,但实现复杂度增加

优化思考

布隆过滤器存在以下局限性,可以考虑优化:

  1. 误报率问题

    • 增加位数组大小
    • 优化哈希函数数量和选择
  2. 不支持删除

    • 考虑使用计数布隆过滤器
    • 但会增加空间开销
  3. 哈希函数选择

    • 使用高质量、低碰撞率的哈希函数
    • 考虑使用双重哈希等技术

测试方法

使用 Google Test 框架进行测试:

  1. 编译项目:
./build.sh debug --make
  1. 进入构建目录:
cd build_debug/
  1. 运行测试:
./bin/ob_bloomfilter_test
  1. 修改代码后重新编译:
make

实验建议

  1. 先理解布隆过滤器的原理再开始编码
  2. 从小规模测试开始,逐步验证功能
  3. 注意并发场景下的线程安全问题
  4. 考虑性能优化方案,但不牺牲正确性

通过本实验,你将掌握 C++ 并发编程基础,理解布隆过滤器的实现原理,并为后续数据库系统实现实验做好准备。

miniob MiniOB is a compact database that assists developers in understanding the fundamental workings of a database. miniob 项目地址: https://gitcode.com/gh_mirrors/mi/miniob

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卓禄嘉Ernestine

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值