最初的金字塔模型是分为两个文件进行存储,一个是索引文件,另外一个是纯粹的数据文件,索引文件存储了层级索引,以及图片单元索引,每一个索引的键值从小到大排序。层级索引存储了自身索引值以及图片单元索引在索引文件中的储位置(有点小绕口,那就再看一遍),数据单元索引存储了每个数据单元的索引值以及每一个数据单元在数据文件中的存储位置。
层级索引的元素格式是固定的,索引值从0到24,而图片单元索引的元素个数是不固定的,这种设计很有针对性。为GoogleMap的层级准备25个层级来存储已经是绰绰有余了,而每一个层级中的图片单元个数不固定的原因也很简单:并不是所有区域都有任意等级的图片单元。
如图所示:
这样的具有针对性的数据结构在按顺序写入和查询图片单元上性能得到了最大化,但在需要修改、插入、删除时就显得有些疲惫了。
1.没有一个文件空间的复用机制,导致在频繁的修改过程中,数据文件变得庞大。
2.双文件存储的特点导致在使用时需要打开2个文件句柄,查询到图片单元进行读取的时候增加了磁盘寻道时间,使用的时候也不是很方便。
3.使用文件流进行数据访问,导致在存储数据量大的时候,打开和关闭文件时速度变慢,同时两个程序在修改文件时,很难保证数据完整性。
在了解现有的数据结构和存在的问题之后,我们就可以开始着手修改……