数据库系统实现(TREE PAGE处理)

       在实现TREE PAGE的过程中,涉及到多个页进行数据更新的过程,实现过程中发现的问题有数据更新页的次序问题,新页生成的问题,缓存不够页置换的问题,数据重新LOAD的问题,写盘时机点的问题。

       数据更新次序问题,可以使用一FIFO,将要处理的数据记入到FIFO中,先进先出,保证处理的次序问题,次序是后处理的PAGE的数据依赖前面数据处理的结果。这里是否可以有更快的处理速度?可以将同一个UP LEVEL PAGE中多个下一级PAGE先预先MEMPAGE ALLOC后,一次循环将数据推到下一级。然后此级就可以接收新的数据,目前的做法是 MEMPAGE ALLOC一个,逐个处理。处理完UP LEVEL的数据后,设定标记,才允许数据再次进入到UP LEVEL PAGE中。

       在FIFO队列中有需要新生成的页,需要进行MEMPAGE空间的分配和文件位置的分配,MEMPAGE需要从CACHE中ALLOC,如果CACHE中有,可以直接获取到,没有的情况则需要等待,需要定时检查使用有空间可以进行ALLOC,检查的方式目前采用的是TASK自己向自己发消息的方式继续行,前面快,后面慢的方式进行,为了防止TASK此消息影响其他消息的处理。MEMPAGE空间获得后就可进行NEW PAGE的处理,将数据进行导入。

        缓存置换的算法使用LRU的算法进行,淘汰的PAGE页需要进行写盘操作,需要判断数据是否在FIFO列表中的数据,最好是不在FIFO中,这样可以减少LOAD数据的IO过程。在写盘的过程中需要对MEMPAGE进行保护,可以通过标记的方式进行,也可以通过消息的方式进行,消息获得后将PAGE还回到CACHE中,供下一个申请的过程使用。标记的方式需要在ALLOC过程中检查标记,如标记表示不可用,则将此数据在加入到FIFO中,取下一个新的页,再检查标记,重复上面过程。两种方式不同在于一个是后加入FIFO 中,一个是先加入到FIFO 中。

       数据LOAD的过程分为两个异步过程,一个是CACHE MEMPAGE ALLOC的过程,一个是从FILE中LOAD数据的过程,ALLOC的过程和上面一样,ALLOC不成功需要定时检查,直到获取到。然后是进行文件读取的过程,获取后通知,读到MEM中进行后续处理。

       MEMPAGE写盘时机点的问题,其中一个是CACHE REPLACE的过程,需要进行置换页的写盘操作,可以在MEMPAGE中对数据进行标记,没有数据更新的情况下,写盘操作可以直接略过,不需要处理。另一个就是NEW MEMPAGE写盘的时机点的选择,简单的做法是更新到一定比例的数据写一次盘,定时检查,有数据变化就进行刷写文件,没有数据变化不刷写盘。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值