分类目录归档:数据库

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 学习数据库前言

Lealone学习(一):简介和QuickStart

Lealone是什么?(发音:把萝莉倒过来念,莉萝) 引用官方描述: Lealone是一个兼具RDBMS、NoSQL优点的面向OLTP场景的分布式关系数据库。 官方地址:https://github.com/lealone/Lealone。 具有以下特点: 开源版本(不支持分布式) 完全异步化,使用少量线程就能处理大量并发 基于SQL优先级的抢占式调度,慢查询不会长期霸占CPU 创建JDBC连接非常快速,占用资源少,不再需要JDBC连接池 插件化存储引擎架构,内置MVStore存储引擎 插件化事务引擎架构,事务处理逻辑与存储分离 支持索引、视图、Join、子查询、触发器、自定义函数、Order By、Group By、聚合 从H2数据库借鉴了大量成熟的代码和思想 从源代码里盗来一张架构图,先看下它的设计(其中Pluggable部分都是可扩展的):

发表在 数据库 | 标签为 , | Comments Off on Lealone学习(一):简介和QuickStart

cassandra入门(三):便捷的@Accessor注解

如果说,入门二的用法是hibernate,那么这篇入门三的用法就更像ibatis。 完整的代码请参考:https://github.com/yankai913/cassandra-java-userguide。 由于本文复用了入门二的部分代码,所以这里只贴新增的。 新增表:

发表在 数据库, 编程语言 | 标签为 , | Comments Off on cassandra入门(三):便捷的@Accessor注解

cassandra入门(二):自定义类型使用和ORM

直接贴代码,cql和代码有些地方与分享电子书里的javaDriver21.pdf有些出入,请以博文为准,cql和代码都是实测跑通的。 cql脚本(在cqlsh.bat窗口里跑): 自定义类型:phone和address。 表:accounts 。

发表在 数据库, 编程语言 | 标签为 , | Comments Off on cassandra入门(二):自定义类型使用和ORM

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.贴代码

发表在 数据库, 编程语言 | 标签为 , | Comments Off on cassandra入门(一):jdbc连接cassandra作增删改查

hbase学习(一)hbase单机部署和java客户端连接单机hbase

最近看了些hbase的东西,打算写点什么,谁知鼓捣的过程中步步是坑,最终呕心沥血,憋出了这篇文章,实属不易。 hbase和hive总是成对出现的,简单说,hbase是数据库,hive是mapReduce作业。 先从hbase单机部署说起,尽量说的简洁点,说多了都是眼泪。 1.给服务器起个机器名,iptables关掉,同时本地绑定host。 起个机器名 127.0.0.1 localhost 211.155.225.210 love-kaige NETWORKING=yes HOSTNAME=love-kaige 关闭iptables 本地绑定host C:\Windows\System32\drivers\etc\hosts 211.155.225.210 love-kaige 然后reboot重启机子,执行 hostname显示love-kaige,service iptables status 显示 iptables: Firewall is not running. 即OK。 2.下载安装jdk和hbase。 jdk应该关系不大,我安装的是jdk-7u51-linux-x64.rpm,环境变量配好即可,此处略过。 hbase下载的是稳定版,地址:http://mirrors.aliyun.com/apache/hbase/stable/hbase-0.94.18.tar.gz。阿里云对apache下的项目和linux不同的发行版都做了镜像,方便了广大的码农,给个赞。 解压hbase,然后对hbase-site.xml进行修改,修改如下: 然后去hbase的bin目录,./start-hbase.sh起起来。 3.编写java代码。 添加依赖: 服务端和客户端的版本最好一致,现在都是0.94.18,免得出现莫名奇妙的问题。hadoop的版本和hbase的版本也有对应关系,把官网的hbase和hadoop的版本匹配表搬过来, Table 2.1. Hadoop version support matrix HBase-0.92.x … 继续阅读

发表在 数据库, 编程语言 | 标签为 , | Comments Off on hbase学习(一)hbase单机部署和java客户端连接单机hbase

记oracle里continue关键字的陷阱

这几天在写pl/sql,中间用到continue关键字,一不小心就掉进坑里。 oracle版本是11g,贴sql: 造数据: 遍历: 打印结果: 1 2 3 4 5 打印结果: a b c d 使用continue: 打印结果: 1 2 4 5 惯性: 打印结果: a b 这里像break。 正确解法: 打印结果: a b d 打印出continue的效果,收工。

发表在 数据库 | Comments Off on 记oracle里continue关键字的陷阱

数据库事务浅析

数据库为什么要有事务,因为,事务是数据库区别于文件系统的特性之一。在文件系统中,如果你正在对2个文件进行修改,一个更新成功,另外一个在更新之前系统崩溃了,那么这就会有2个不同步的文件。 数据库中事务的基本作用就是将数据库从一种一致性状态转变为另外一种一致性状态。 数据库事务有4个特征(acid): 1.原子性(atomicity):事务中的所有动作要么都发生,要么都不发生。 2.一致性(consistency):事务将数据库状态从一种一致状态转变为下一种一致状态。 3.隔离性(isolation):一个事务的影响在该事务提交前对其他事务都不可见。 4.持久性(durability):事务一旦提交,其结果就永久性的。

发表在 数据库 | 标签为 | Comments Off on 数据库事务浅析