fastdb的索引

索引主要分为 hashTable, Rtree, Ttree

hashTalbe 比较简单,直接看代码就行

Rtree 就是最简单的Rtree实现,和从网上找到的其它代码区别不大,没有R*tree, R+tree之类的改进,现在默认是两维,查询是根据递归实现的,删除的时候,也是先删除,之后再最新插入

 

下面主要分析Ttree,请先看下面的论文

A study of index structures for main memory database management systems

以及文档中的Ttree部分;

Ttree只用到了两个类,

class FASTDB_DLL_ENTRY dbTtree {
protected:
    oid_t root;

......

}

dbTtree 只有一个字段,指向根页面dbTtreeNode

class FASTDB_DLL_ENTRY dbTtreeNode {
    enum {
        pageSize = 125,
        minItems = pageSize - 2 // minimal number of items in internal node
    };

public:
    oid_t left;
    oid_t right;
    int1 balance;
    nat2 nItems;
    oid_t item[pageSize];

.......

}

dbTtreeNode 中 left 和 right 指向最左和最右对应的dbTtreeNode 页面,item 是oid的数组,指向一个一个的元组,nItems 是tiem中数组的实际使用个数

查找比较简单,

就是把查找的 key 先与 item[0] 对应的元组比较,小的话,就从左边子树查找,大的话,就再与 item[nItems -1] 比较,大的话,就去右边子树查找,小的话,就在item[0] 和 [nItems -1] 查看是否存在满足条的的元组,这和一般的树的查找区别不大

插入的过程中,位于树的中间结点也存储了元组,而不是指向下一层结点的指针,这样的话,当插入的顺序不一样的话,树的结构也就不一样,另一方面就是,当不是AVL树之后,就旋转,

删除的操作就是多了一个旋转的过程,别的和普通的树差别不大

由于多了一步旋转的操作,旋转时要读入与之相邻的祖先或子孙结点,所以Ttree比较适合在内存中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值