使用B+树和快照隔离实现范围查询



我正在开发一个新的NoSQL数据库服务器产品。有没有关于如何在使用快照隔离的集群B+树上实现范围查询的论文?

我已经编写了几个B+树实现。对于范围查询,您将光标移动到具有范围下限的键上,然后"向右移动",直到达到上限。一个B+链接树(在叶节点之间有左/右指针)使这变得非常简单。

然而,我从未实现过快照隔离。我认为这在很大程度上取决于你的隔离算法。如果使用阴影页(为每个事务创建修改后的页的副本),则必须在沿叶节点"向右移动"之前检查是否存在阴影页。

您可以向每行添加一个名为"RowVersion"的隐藏列。无论何时更新一行,都会插入一个新行,而RowVersion会更新为当前事务编号。读取时,您选择版本最低的行,该行的版本大于等于您的交易编号。您还需要一些清理任务。

您也可以将行版本存储在其他位置。它不必在同一个B树中。您可以将它们保存在RAM中,或者在服务器重新启动时重新创建的临时数据库中。

最新更新