-
近期文章
标签
文章归档
- 2020 年一月
- 2019 年六月
- 2018 年四月
- 2017 年八月
- 2017 年七月
- 2016 年十一月
- 2016 年十月
- 2016 年六月
- 2016 年五月
- 2016 年一月
- 2015 年十二月
- 2015 年十一月
- 2015 年十月
- 2015 年九月
- 2015 年八月
- 2015 年六月
- 2015 年五月
- 2015 年四月
- 2015 年三月
- 2015 年一月
- 2014 年十二月
- 2014 年九月
- 2014 年八月
- 2014 年六月
- 2014 年五月
- 2014 年四月
- 2014 年三月
- 2014 年一月
- 2013 年十二月
- 2013 年十一月
- 2013 年十月
- 2013 年九月
- 2013 年八月
- 2013 年七月
分类目录
功能
标签归档:java
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,返回给客户端。 整理几个常见的类的依赖关系,便于理解代码。
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就是客户端与服务端建立的一个连接包装器,用来进行数据的读写。
Lealone学习(一):简介和QuickStart
Lealone是什么?(发音:把萝莉倒过来念,莉萝) 引用官方描述: Lealone是一个兼具RDBMS、NoSQL优点的面向OLTP场景的分布式关系数据库。 官方地址:https://github.com/lealone/Lealone。 具有以下特点: 开源版本(不支持分布式) 完全异步化,使用少量线程就能处理大量并发 基于SQL优先级的抢占式调度,慢查询不会长期霸占CPU 创建JDBC连接非常快速,占用资源少,不再需要JDBC连接池 插件化存储引擎架构,内置MVStore存储引擎 插件化事务引擎架构,事务处理逻辑与存储分离 支持索引、视图、Join、子查询、触发器、自定义函数、Order By、Group By、聚合 从H2数据库借鉴了大量成熟的代码和思想 从源代码里盗来一张架构图,先看下它的设计(其中Pluggable部分都是可扩展的):
扩展webx资源装载器之HttpResourceLoader(一):简单实现
webx是一个开源的web框架,主页地址:http://www.openwebx.org/。这里我们主要说下使用http协议对网络中任意资源进行装载,来增强webx资源装载的功能。 用webx官网的mvn命令,生成tutorial1项目,里面webx的pom如下: 这个版本里,webx的resourceLoader有2种扩展: [res-loaders:webapp-loader /]:通过servletContext.getResource(resourceName)来获取资源。 [res-loaders:classpath-loader /]:通过classLoader.getResource(resourceName)来获取资源。 [res-loaders:super-loader/]:通过resource.xml里配置的资源别名,结合配置的资源加载器,来进行资源加载。这种是在前面2种的基础之上。 基于springExt,这里扩展点是res-loaders,捐献是webapp-loader,classpath-loader和super-loader。 新增一个http-loader,即[res-loaders:http-loader/],具体的捐献实现和配置在后面会再进行介绍,。 HttpResourceLoader简单类实现:
RocketMQ学习(九):顺序消息
rocketmq的顺序消息需要满足2点: 1.Producer端保证发送消息有序,且发送到同一个队列。 2.consumer端保证消费同一个队列。 先看个例子,代码版本跟前面的一样。 Producer类:
cassandra入门(三):便捷的@Accessor注解
如果说,入门二的用法是hibernate,那么这篇入门三的用法就更像ibatis。 完整的代码请参考:https://github.com/yankai913/cassandra-java-userguide。 由于本文复用了入门二的部分代码,所以这里只贴新增的。 新增表:
cassandra入门(二):自定义类型使用和ORM
直接贴代码,cql和代码有些地方与分享电子书里的javaDriver21.pdf有些出入,请以博文为准,cql和代码都是实测跑通的。 cql脚本(在cqlsh.bat窗口里跑): 自定义类型:phone和address。 表:accounts 。
cassandra入门(一):jdbc连接cassandra作增删改查
先分享一个最新的cassandra-java-driver文档,点击电子书分享里的链接,找到javaDriver21.pdf。 该文档内容比较全,包含:jdbc连接cassandra集群,执行cql增删改查,批量查询,异步查询,cql的类型和java类型的映射关系及用户自定义类型使用,ORM等。 Cassandra是一个NoSql数据库,纯java编写,apache的顶级项目,主页:http://cassandra.apache.org/(简介不多说网上有)。 入门步骤:(我的jdk版本是1.7.0_71,win7系统) 1.去主页下载cassandra,我下载的是apache-cassandra-2.1.9,然后bin/cassandra.bat启动数据库,如果想使用bin/cqlsh.bat则需要安装python2.7。 2.贴代码
RocketMQ学习(八):事务消息
源代码版本是3.2.6,还是直接跑源代码。rocketmq事务消息是发生在Producer和Broker之间,是二阶段提交。 二阶段提交过程看图: 第一阶段是:步骤1,2,3。 第二阶段是:步骤4,5。 具体说明: 只有在消息发送成功,并且本地操作执行成功时,才发送提交事务消息,做事务提交。 其他的情况,例如消息发送失败,直接发送回滚消息,进行回滚,或者发送消息成功,但是执行本地操作失败,也是发送回滚消息,进行回滚。