odb研究日志
2008.5.2 开始分析源代码
ODB -
ODBAdapter-
LocalODB、RemoteODBClient、SameVMODBClient
IStorageEngine-
LocalStorageEngine
MockStorageEngine、ServerStorageEngie
StorageEngineAdapter
ClientStorageEngine
SameVmClientEngine
ODB odb=ODBFatory.open("mars.odb"); 打开一个odb数据库的流程分析。
Session
LocalSession
ServerSession
ClientSession
MockSession
MetaModel
SessionMetaModel
FileSystemInterface
IBufferedIO
BufferedIO
DefaultFileIO
MultiBufferedIO
MultiBufferedFileIO
IOFactory.getInstance
ObjectReader
ObjectWriter
IObjectIntrospector
LocalObjectIntrospector
ClientObejctIntrospector
ServerObjectIntrospector
Objects(继承Collection)
odb.store(sport) odb保存数据到数据库流程
LocalStorageEngine.internalStore(sport)
->ClassInfoList ClassIntrospector.internalIntrospect(sport)
->ClassInfoList addClasses->persistClass->objectWriter.writeClassInfoBody->writeAction persist
FileSystemInterface writeLong
->MultiBufferedIO.writeBytes
objectWriter.internalStoreObject
->insertNonNativeObject
-> writerNonNativeObejctInfo
2008.5.10
Objects objects=odb.getObjects(Sport.Class) 查询流程
2008.5.15
总结出保存流程
2008.5.17
总结出查询流程
2008.5.18
GenericQueryExecutor 查询条件处理器
2008.5.20 开始思考如何自己实现类似odb的面向对象数据库引擎,拟采用压缩包方式
2008.5.24 项目名称ojadb诞生,logo出台
2008.5.27 开始分析odb的文件,对保存下来的每个字节进行分析
2008.6.4 经过几天尝试,否定了zip方案,因为性能很差
2008.6.5 ojadb的存储方案有了第一稿
2008.7.14 ojadb的存储方案经过编码,进入测试。
2008.7.19 ojadb的存储方案第二稿出台,并通过编程存储和读取,验证无误。
2008.8.3 odb查询第二次分析
IQuery query=new CriteriaQuery(Player.Class,Where.equal("name","Henry");
ObjectReader.getObjectst
->IQueryExecuor ----CriteriaQueryExecutor.execute 没有索引时executeFullScan
匹配查询条件,利用oid做标识
matchObjectWithOid
->b=CriteriaQueryManger.match(q,map)->q.map->EqualVriterion.match(map) ----map.getAttributeValue(查询条件中的字段名)
if(b) ObjectReader.readNonNativeObjectInfoFromOid