网上找不到任何有价值的东西,只能自己研究源代码了
JISP是用B-树进行存储任意类型数据的小型数据库
com.coyotegulch.jisp包里面实现的是核心算法,生成的jar包可以引入工程直接调用
外面的文件是用来测试的例子
*****************存储数据******************
用IndexedObjectDatabase创建一个对象database,用来调用存储数据库
构造函数:IndexedObjectDatabase(String filename, boolean is_new)
filename 是文件名
is_new 是boolean型的参数,输入文件是不是新的。当为true时新建这个文件,如果重名则覆盖原有文件。如果是false则载入原有文件。
用BTreeIndex创建一个对象index来建立索引
构造函数:BTreeIndex(String name, int order, KeyObject nullKey, boolean hasDupes)
name 文件名
order 树节点的个数
nullkey 传递进来的数据类型
hasDupes 是否允许值重复
构造函数:BTreeIndex(String name)
name 已有文件的名字
调用attachIndex(ObjectIndex index)方法 database.attachIndex(index);
把索引加入数据库
调用write(KeyObject key[], Serializable obj)方法 database.write(keyArray,record);
key 与index类型匹配
obj 要存储的数据
例如:IndexedObjectDatabase database = new IndexedObjectDatabase("db",true);
BTreeIndex index1 = new BTreeIndex("index",8,new ZipKey(),false);
database.attachIndex(index1);
KeyObject [] keyArray = new KeyObject[1];
keyArray[0] = new ZipKey(zip);
database.write(keyArray,record);
备: keyObject是要实现的一个数据类型说是与objectindex相关,现在还不是很明白。
这里的Zipkey是对它的一种实现,可以所谓要进行搜索的检索键值
record是要存储的数据
*****************读取数据******************
IndexedObjectDatabase database = new IndexedObjectDatabase("db",false); //false 表示已经存在文件了
BTreeIndex index1 = new BTreeIndex("index"); //载入已经创建的索引
database.attachIndex(index1);
KeyObject [] keyArray = new KeyObject[1];
keyArray[0] = new ZipKey(zip);
database.read(keyArray,record);
Object read(KeyObject key, ObjectIndex index)方法,读取键值为key的,索引为index的数据
Object read(IndexIterator iterator)方法,读取iterator里面的数据,用iterator.moveNext()转到下一个元素,调用之前要建立BTreeIterator iterator = new BTreeIterator(codeIndex);
删除数据调用database.remove(keyArray);
综述:用到的类IndexedObjectDatabase 建立数据库
BTreeIndex 建立索引
KeyObject 实现这个接口,作为索引数据
BTreeIterator 建立树中的iterator