我和同学正在做一个小型的数据库系统。我们的思路是这样的:数据库文件结构:
文件头放在最前面,接着是索引信息,接着是记录。现在关键是各个记录表之间怎么组织。我开始的想法是:为每张表开辟一个64K的空间。这个64K的空间相当于一个块,块头存贮的是表头信息(在工作区我对应一个专门存贮表头信息的链表)。假如第一张表大于64K,就开辟新的块存贮(块头依然存贮第一张表的信息)。我同学的想法是:不如一下开辟一个128K的块,第一张表的信息从块头开始写入,第二张表从块尾开始写入,然后两头并进,写满后再新开一个块,这样可以节省用户的磁盘空间。我想了想也觉得也有道理。    新建一个数据库,对程序来说就是新建一个工作区,然后通过工作区进行操作。
工作区的结构大致是这样的:
文件头变量,用来存贮文件头信息
表头变量,用来存贮表头信息
记录缓存,以一个结构体数组表示,当用户添加数据,先放入缓存,然后当缓存满了才写入文件,当查询记录也是先查询缓存然后缓存没有才去访问文件。
索引变量,专门读取文件的索引部分。     因为我们要先在文件开辟一个空间,然后再在这个空间写数据,而不是像一般文件操作那样读多少数据就写多少数据。我计划通过使用Win32的函数使用内存影射文件来处理。还有一个问题是每当记录写满了128k就要新开辟一段空间,还要把这段空间和原来的空间联系起来。我现在还没有找到好的办法。请问大家有没有好的办法?

解决方案 »

  1.   

    我想到的一个办法是通过保存下一个空闲记录块的地址来和上一个记录块联系起来。
      

  2.   

    数据库操作应该立即保存,否则一停电,用户登录的信息就玩了
    应该效率第一,然后才是存储
      

  3.   

    对于如何把多个128K空间的联系起来。我暂将每个128K空间称为一个块。每个块头存贮的是表信息,还有上一个块的地址(假如是第一个块则设为空)和下一个块的地址(假如是最后一个块则设为空)类似双链表。不过好像内存映射文件没有这个做法。
      

  4.   

    安全和效率方面我也会考虑的。