标签归档:h2database

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的生命周期(下)

h2database学习(一):executeQuery的生命周期(上)

从 https://github.com/h2database/h2database 拉代码到本地,找到org.h2.tools.Server,直接运行main()方法,控制台输出如下: TCP server running at tcp://192.168.0.104:9092 (only local connections) PG server running at pg://192.168.0.104:5435 (only local connections) Web Console server running at http://192.168.0.104:8082 (only local connections) 表示数据库已经成功起来了。如果服务端和客户端不是同一台机器,则服务端启动时需要加上启动参数-tcpAllowOthers以便允许其他机器的客户端访问。 然后找到org.h2.samples.HelloWorld,运行main()方法,控制台输出: Hello 客户端运行完毕。 客户端connection的产生: Transfer就是客户端与服务端建立的一个连接包装器,用来进行数据的读写。

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

学习数据库前言

去年拉了lealone代码,看了一部分,后来琐事多,再加上没能严格要求自己,学习就中断了,这一放纵就是半年。后来偶尔也有看这看那,但是看的东西不能够沉淀成文字输出出来,基本也只能算是浅尝辄止。学习,贵在坚持。 后面打算学习数据库方面的东西。 由于本人擅长java语言,网上找了下,纯java写的开源数据库也不少。 Lealone:https://github.com/lealone/Lealone h2database:https://github.com/h2database/h2database derby:https://github.com/apache/derby hbase:https://github.com/apache/hbase Cassandra:https://github.com/apache/cassandra 以后可能就围着上面这几个项目学习了,希望自己能够坚持下去。 BTW:以前说到的数据库中间件cobar(https://github.com/alibaba/cobar)也有看,但是感觉,在应用和数据库之间的这层proxy还是简单点好,至少可以保证功能完整,出了问题也好排查,实在不行在一个库里多建几张表,你说呢。

发表在 数据库 | 标签为 , , , , | Comments Off on 学习数据库前言