一、背景
数据库文件是数据库软件系统存放数据的形式和载体。
有的数据文件分为基础文件和索引文件两种。
二、本文目的
只设计基础文件,不设计复杂的索引文件。
三、具体思路
分为两种,一种是二进制连续存放,另一种是文本文件格式。
(一)假设记录为如下:
1001 小明 男
1002 小红 女
(二)二进制存储格式为
1、每条记录连续存放,格式如下:
4个字节存放主键
10个字节存放姓名
5个字节存放性别
2、把下面两条记录的对应字段值,存入对应的字节区中。
1001 小明 男
1002 小红 女
具体做法:
把1001存到4个字节中。
接下来的10个字节靠左存放字符串'小明',多余的字节用'\0'填充。
再连续5个字节存放字符'男',多余的用'\0'填充。
把小花的记录存储也类似,连续存放。
3、注意字符集,一般用UTF8或者GBK。
(三)文本存放格式案例
1、用xml格式
内容如下:
<root>
<line>
<id>1001</id>
<name>小明</name>
<sex>男</sex>
</line>
<line>
<id>1002</id>
<name>小红</name>
<sex>女</sex>
</line>
</root>
特点是:每个元素有成对的标签包括,所有的字段构成一棵树。
标签名用户可以自定义设计。
2、自定义格式
后缀名可以任取,例如.mytxt,.mfff
格式如下:
1001 | 小明 | 男\r\n
1002 | 小红 | 女\r\n
\r\n
主要思路:
每台记录组成一行,用换行符结尾。
记录之间用一个间隔符隔开,此处用字符’|’。
最后一行为空,代表结束。
实际可以用其他字符隔开,例如逗号,空格。
四、总结
(一)设计存放数据的文件字节格式可以很灵活。
(二)可以慢慢的升级和改进。
(三)可以用一些算法来进行索引查询。
五、修改结构的难点
1、数据库的文件在存放数据时,里面的存储结构一般在设计时是固定的。
2、需要支持使用者用SQL语句改变库的名字。
一般修改文件中存放库名的字节内容就行。
3、需要修改文件的存储记录结构。
实现很难,因为数据连续存储,如果想增加字段,那么就有大规模的数据要往后移动。
如果删除字段,那么有大量数据往前移动。
如果缩短或者增加字段的字节占用个数,也需要大规模移动。
六、一些改进
1、把相邻的记录建立链式联系
使用链式文件存储,也就是每个记录有一个区域保存下一个记录的文件读取位置,允许文件存储顺序跳跃,只需要有记录指向,连成一条链。
链式结构能快速插入新记录和删除旧记录。
2、事先为每条记录开辟足够大的空间
例如:
规定每条记录总占用字节个数为100字节。
每次存储时每条记录的各个字段存放空间都在这100个字节中分配。
如果记录超出空间范围,另外建一个文件来存放超出规定范围的字段。