我正在开发一种新的NoSQL数据库服务器产品。是否有关于如何在使用快照隔离的群集B +树上实现范围查询的文章?
答案 0 :(得分:1)
我写了几个B +树实现。对于范围查询,您将光标移动到具有范围下限的键,然后"向右移动"直到达到上限。 B +链接树(在叶节点之间有左/右指针)使得这非常简单。
但是,我从未实现快照隔离。我认为这很大程度上取决于你的隔离算法。如果您使用影子页面(您为每个事务创建已修改页面的副本),那么您必须检查影子页面是否存在之前"向右移动"沿叶节点。答案 1 :(得分:0)
您可以为名为“RowVersion”的每一行添加一个隐藏列。每当更新行时,都会插入一个新行,而RowVersion会更新为当前事务编号。阅读时,您将获取版本最低的行≥> =您的交易号。你还需要某种清理任务。
您还可以将行版本存储在其他位置。它不必在同一个B树中。您可以将它们保存在RAM或在服务器重新启动时重新创建的临时数据库中。