project2:B+tree 迭代器

Task #3 索引迭代器

一个通用索引迭代器来有效地检索所有叶页。基本思想是将它们组织成一个链表,然后以特定方向遍历存储在 B+Tree 叶子页面中的每个键/值对。您的索引迭代器应遵循 C++17 中定义的迭代器的功能,包括使用一组运算符和 for-each 循环(至少具有增量、取消引用、等于和非)迭代一系列元素的能力。相等运算符)。请注意,为了支持索引的 for-each 循环函数,您BPlusTree应该正确实现begin()end()

 Task #4 并发索引

采用多索引结构,利用每个节点独立的读写锁兼顾了多线程并发访问的安全性和效率

您需要更新您原来的单线程B+Tree索引,使其能够支持并发操作。只有当子页面被认为是“安全的”时,线程才能释放父页面上的锁。注意,“安全”的定义可以根据线程正在执行的操作类型而变化:

搜索:

从根页面开始,读(R)锁在孩子,一旦到孩子页面,然后释放父页面的锁( release latch on parent as soon as you land on the child page.)。


插入:

从根页开始,子页上的写(W)锁。一旦孩子被锁上,检查它是否安全,在这种情况下,不满。如果子节点是安全的,则释放父节点上的所有锁(If child is safe, release all locks on ancestors.)。


删除:

从根页开始,子页上的写(W)锁存器。一旦孩子被锁上,检查它是否安全,在这种情况下,至少是半满的。(注意:对于根页面,我们需要用不同的标准来检查)如果子节点是安全的,那么释放父节点上的所有锁(If child is safe, release all locks on ancestors.)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值