• 【转】fastdb中的数据字典


        在程序的启动过程中,第一项任务,在没执行main 函数之前,通过REGISTER宏定义,把表的结构存储在一个全局变量的列表中static dbTableDescriptor* chain,由于此时数据库还没有启动,所以结构只存储在内存中,在硬盘上是不存在的。、

        当调用数据库的open 函数时,里面调用的loadScheme函数,把内存中的表结构存储到硬盘上,这个函数还可以进行反向操作,就是把硬盘上已有的表结构来更新内存中的链接。

        在内存中存在dbTableDescriptor和dbFieldDescriptor这两种数据结构,与硬盘上的dbTable和dbField,在使用过程中,内存的ebTableDescriptor想当于数据字典,它在数据库的启动过程中会和dbTable时行一次同步,在硬盘上,表的存储结构如下:

        (dbTable->FirstRow)--->(dbRecord(row1)->next)--->(dbRecord(row2)->next)--->(dbRecord(row3)->next)........

    firstRow和next域全存储的是下一个对象的oid,通过oid可从index里面找到对应对象在文件中的偏移位置,就能得到下一个对象,其实是双向链表,为了简单只画成了单向的。fastdb在存储的时候,不像普通的数据库,如postgreSQL把同属于一个表的记录存储在一个物理页面中,fastdb在一个物理页面中可能存储属于不同表的记录,完全取决于存储的顺序。

  • 相关阅读:
    php date函数
    jquery AJAX教程
    Magento 批量修改订单状态为 Completed
    php 复习笔记 乱
    正则替换 php js
    magento订单状态修改
    换个心态继续走IT路
    神奇的HTML5,效果超炫,用Google chrome浏览
    PHP $_SERVER参数
    第六章 线程基础
  • 原文地址:https://www.cnblogs.com/QoQian/p/5160521.html
Copyright © 2020-2023  润新知