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