ODB research log
Source code analysis started in 2008.5.2
ODB-
Odbadapter-
Localodb, remoteodbclient, samevmodbclient
Istorageengine-
Localstorageengine
Mockstorageengine and serverstorageengie
Storageengineadapter
Clientstorageengine
Samevmclientengine
ODB = odbfatory. Open ("Mars. ODB"); open an ODB database for Process Analysis.
Session
Localsession
Serversession
Clientsession
Mocksession
Metamodel
Sessionmetamodel
Filesysteminterface
Ibufferedio
Bufferedio
Defaultfileio
Multibufferedio
Multibufferedfileio
Iofactory. getinstance
Objectreader
Objectwriter
Iobjectintrospector
Localobjectintrospector
Clientobejctintrospector
Serverobjectintrospector
Objects (inheriting collection)
ODB. Store (sport) ODB saves data to the database Process
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) Query Process
2008.5.15
Summarize the Save Process
2008.5.17
Summarize the Query Process
2008.5.18
Genericqueryexecutor query condition Processor
8.5.20 began to think about how to implement an ODB-like object-oriented database engine.
2008.5.24 project name ojadb was born and logo was published
ODB files were analyzed to analyze each stored byte
8.6.4 after several days of attempts, I rejected the zip solution because of poor performance.
The first draft of the ojadb storage solution is available in 2008.6.5.
The storage solution of ojadb is encoded and tested.
The second draft of the ojadb storage solution was published in 2008.7.19. It is verified by programming storage and reading.
Second Analysis of ODB Query
IQUERY query = new criteriaquery (player. class, where. Equal ("name", "Henry ");
Objectreader. getobjectst
-> Iqueryexecuor --criteriaqueryexecutor.exe cute: executefullscan when no index is available
Matches query conditions and uses OID for identification
Matchobjectwithoid
-> B = criteriaquerymanger. Match (Q, MAP)-> q. Map-> using vriterion. Match (MAP) ---- map. getattributevalue (field name in the query condition)
If (B) objectreader. readnonnativeobjectinfofromoid