fastdb
spche
这个作者很懒,什么都没留下…
展开
-
fastdb的REPLICATION SUPPORT
先看文档中的 Fault tolerant support 部分primary node 和 standby node 在主数据文件之外,还多了一个以 cnt 为后缀的文件,这个文件里面存储的是整数数组,有物理上能存多少个页面,这个数组就有多在,数据的每一个元素与一个页面相对应,是只增不减的,当这个页面更新过之后,这个整数就递增,不一定是递增1。这个文件主要是为了增量恢复,当primary n原创 2010-01-12 10:43:00 · 1522 阅读 · 0 评论 -
fastdb的事务与恢复
请先看fastdb自带的文档,这里只对里面进行一些解释 fastdb只支持multiple-readers-single-write的封锁机制,就是说当是写锁时会封锁整个数据库,不充许进行其它操作,在看源代码时,也没找到死锁检查的部分,只找到了读锁向写锁升级的部分,而且封锁会持续到事务结束才放弃,这种锁机制造成了事务的实现也比较简单,当向数据库中更新一条记录时,1.要申请新的空间,原创 2010-01-12 10:47:00 · 1614 阅读 · 0 评论 -
MetaTable
fastdb 只有一个MetaTable,内容如下metaTableFields[] = { { "name", dbField::tpString, sizeof(dbVarying), offsetof(dbTable, name)}, { "fields", dbField::tpArray, sizeof(dbVarying),原创 2010-01-12 10:49:00 · 1776 阅读 · 0 评论 -
数据库文件组织结构
dbHeader(4096).......| index(默认512*1024) ....... | shadowIndex(默认512*1024) ........| bitmap page (默认计算出来是9个,4*4096,占用的置1,表示已占用).........| page(4096) | page(4096) | ............ fastdb只有一个数据文原创 2010-01-12 10:48:00 · 2406 阅读 · 0 评论 -
Bitmap分析
在bitmap中用一位来表示page是否被占用,1表示被占用,0表示没被占用,计算机里面处理的位数最少的变量是byte,所以也就是8位做为一个整体来对待,8位表示的整数是从0到255,firstHoleSize [] lastHoleSize [] maxHoleSize [] maxHoleOffset [] 是四个固定的数组,每个数组都有256个元素,对应从0到255的整数,每个整数的二进原创 2010-01-12 10:50:00 · 1734 阅读 · 1 评论 -
fastdb的索引
索引主要分为 hashTable, Rtree, TtreehashTalbe 比较简单,直接看代码就行Rtree 就是最简单的Rtree实现,和从网上找到的其它代码区别不大,没有R*tree, R+tree之类的改进,现在默认是两维,查询是根据递归实现的,删除的时候,也是先删除,之后再最新插入 下面主要分析Ttree,请先看下面的论文A study of index stru原创 2010-01-12 10:45:00 · 1659 阅读 · 0 评论 -
fastdb中记录的插入,更新,和删除,查询
记录的插入记录的插入首先从内存中的dbTableDescriptor链表中找到对应的表oid,从硬盘上读取dbTable,之后分配记录空间,把记录存入硬盘,分配记录的oid,根据dbTable中的lastRow,把新的记录链入双向链表中,如果有索引的话,找出对应的字段更新索引,dbTableDescriptor链表相录于数据字典的作用, 更新和删除,也是这个过程,查询的过程,大致也原创 2010-01-12 10:46:00 · 2738 阅读 · 1 评论 -
fastdb中的数据字典
在程序的启动过程中,第一项任务,在没执行main函数之前,通过REGISTER宏定义,把表的结构存储在一个全局变量的列表中static dbTableDescriptor* chain;,由于此时数据库还没有启动,所以结构只存储在内存中,在硬盘上是不存在的,当调用数据库的open函数时,里面调用loadScheme函数,把内存中的表结构存储到硬盘上,这个函数还可以进行反向操作,就是把硬盘上已有原创 2010-01-12 10:47:00 · 1358 阅读 · 0 评论