使b + tree并发(c)

时间:2018-08-28 12:35:54

标签: c data-structures concurrency b-tree

我目前正在尝试并发b +树。

到目前为止,我想到的方法是在插入时遍历树,锁定每个节点(每个节点都有其自己的锁),一旦获得锁定,就解锁到树中的下一个节点,直到一个节点的子级具有b +树的顺序-可以修改该节点下的1个键,然后运行所有必需的插入操作并解锁该节点。

这显然是一种非常幼稚的方法,并没有提供太多的并发方式,所以我想知道是否有更好的方法可以做到这一点?任何输入将不胜感激!

1 个答案:

答案 0 :(得分:0)

我刚刚完成了一个实现并发B +树的项目。您可以从CMU 15-445(数据库系统)中找到一些直觉:

https://15445.courses.cs.cmu.edu/fall2018/slides/09-indexconcurrency.pdf(幻灯片) https://www.youtube.com/watch?v=6AiAR_giC6A&list=PLSE8ODhjZXja3hgmuwhf89qboV1kOxMx7&index=9(视频)

一种执行此操作的方法称为“闩锁捕捉”。基本上,每个节点都需要一个RWLock。

搜索叶节点时,可以在访问的每个节点上添加一个Read(搜索)或Write(插入/删除)锁。一旦发现节点是“安全的”(即,它不会拆分以进行插入,或者它不会与Delete中的邻居合并/重新分配),就可以释放其祖先的锁,因为您知道修改仅限于这个节点。这样,您将获得前部锁,然后释放后部锁,就像螃蟹一样行走,这就是为什么它被称为“闩锁捕蟹”(我在这里误用了“闩锁”和“锁”)

这可能很难实现,很好的锁定:)