关于全新的数据结构的思路: [1] 每个表分三块储存,分别是三个文件:{name}_i 储存索引,每次首先读取;{name}_s 储存定长数据;{name}_u 储存非定长数据。 [2] {name}_i 表: 表头数组结构: Array ( [rows] =>(rows number) //记录数 [autoid] =>(auto increace id) //自动ID值 [fields_s] => Array //定长字段 ( [(field 1)] =>(field lenth) //键值为字段名,元素值为字段长度 ..... ) [fields_u] => Array // ( [0] =>(field 1) ..... ) [fields] => Array //该表字段 ( [id] =>10 //自动ID值,每张表必须有自动ID,长度为10, [line_s] =>6 //定长表里该记录所在的行,长度为6,即TXTDB数据容量在百万以内。 [line_u] =>6 //非定长表里该记录所在的行。 [(field 1)] =>(field lenth) //索引字段。键值为字段名,元素值为字段长度。 ..... ) ) 其中索引字段必须定长! 操作: 添加:直接写到文件末尾。 修改:直接移动文件指针到修改处写入数据。 删除:重写整个文件,以保证ID是从小到大的顺序。 查询:对索引字段数据的查询按行读取,比较,和0.2.X版基本相同;对自动ID的查询按二分法,可以快速定位。 [3] {name}_s 表: 无表头,数据结构: "id,(field 1),(field 2),..."//分割符问题[1] 操作: 添加:直接写到文件末尾,并把行数信息添加到{name}_i里。 修改:直接移动文件指针到修改处写入数据。 删除:把最后一行的数据写到欲删除行,并把相关行的信息更新到到{name}_i里。 查询:按行读取,比较,和0.2.X版基本相同。[2] [4] {name}_u 表: 无表头,数据结构: "id,(field 1),(field 2),..."//有分割符 操作: 添加,修改,删除,查询:暂定和0.2.X版基本相同。
|