月归档:2018年04月

h2database学习(二):executeQuery的生命周期(下)

这里主要讲数据的获取,先看一张简图 一次查询,客户端总共发起3次请求,分别是请求建立连接(A),请求传入sql预编译(B),执行查询(C)。 服务端: 收到A请求后,初始化Session,DB,Table,Index,Page。其中包含读db文件取到meta信息和真实数据,加载到内存。如果数据量小,比如我测试只有2条数据,作为Root的Page,已经把这2条记录加载到其内部的成员变量Object[] keys,Object[] values了,在后面接收到C请求后,不会再有读磁盘的IO操作。 收到B请求后,解析sql语句,什么表,有哪几列,生成DML指令缓存起来并返回给客户端。 收到C请求后,遍历索引,从Page里取出数据封装成RowImpl,返回给客户端。 整理几个常见的类的依赖关系,便于理解代码。

发表在 数据库 | 标签为 , | Comments Off on h2database学习(二):executeQuery的生命周期(下)