加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

fastdb中的数据字典

发布时间:2020-12-13 17:56:40 所属栏目:百科 来源:网络整理
导读:在程序的启动过程中,第一项任务,在没执行main函数之前,通过REGISTER宏定义,把表的结构存储在一个全局变量的列表中static dbTableDescriptor* chain;,由于此时数据库还没有启动,所以结构只存储在内存中,在硬盘上是不存在的, 当调用数据库的open函数时

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

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

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

在硬盘上,表的存储结构如下:

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

firstRow 和 next 域全存储的是下一个对象的oid,通过oid可从index 里面找到对应对象在文件中的偏移位置,就能得到下一个对象,其实是双向键表,为了简单只画成了单向的

fastdb在存储的时候,不像普通的数据库,如postgreSQL把同属于一个表的记录存储在一个物理页面中,fastdb在一个物理页面中可能可能存储属于不同表的记录,完全取决于存储的顺序

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读