2008-05-06
h2database 普及系列一: 简介
这不是一个新东西,但是它却是一个被严重低估的东西.
为了让它不再被继续低估,我打算为推广和宣传它贡献出自己的一点点力量.
=================================
先来个简介.
h2database 官方网站
http://www.h2database.com/
这个是一个 java编写的轻量级数据库.
类似的轻量级数据库实际上有很多, 例如java自带的derby,还有历史悠久的hsqldb,postgreSQL,sqlite...
和这些前辈比起来似乎他的来头小了一点.但是它绝对绝对绝对足够出色足够优秀.
我第一次接触他大概是在两年前, 使用它之后我就几乎再也没用过其他轻量级数据库了.(之前用过hsqldb mysql postgresql)
它完全开源, 小巧, 纯java编写,只有一个不到1M的jar(已经包含了jdbc驱动) , 不依赖任何第三方的组件.
支持多种数据库模式: c/s模式(相当于一个轻量级的mysql), 内存模式(相当于一个轻量级的内存数据库), 嵌入式模式.
支持多种连接方式. 支持hibernate.
拥有详尽出色的文档.这是我见过的最出色的开源软件文档之一.完全可以作为一本学习数据库的教材来使用.
由于全部由java编写,所以可以用java对它进行全面的控制,例如 启动/停止服务, 管理帐号等等.
当然,如果它不与java的程序配合使用,那么优势就减少很多,因为毕竟还需要jdk支持.
=================================
和其他轻量级数据库的特性对比:
它还有如下主要特性:
更多的详细说明见: http://www.h2database.com/html/features.html
下面是性能对比
(此处只是c/s模式下的对比, 这里 http://www.h2database.com/html/performance.html 还有更多的对比):
当然,它也有缺点,但是它的缺点往往只有在把它应用到它并不适合的场景(高并发 大数据量)时才会体现的比较明显.
=================================
H2DB出现也有很长时间了, 但是名气一直不大,我觉得并不是他的品质造成的,而是因为它的背后缺少大型的商业的组织支持.
近期我也正打算写一些H2DB的文章,来为h2db的普及做一些贡献,敬请期待.
JE上以前也有一些介绍性文章
大家可以自行搜索一下
在"介绍""概述"方面 显然其他作者比我更擅长 :D
==================================
补充
==================================
针对robbin 的回复补充一个现实中的一个场景:
以前给某公司做BSS, 遇到了下面的情况.
系统的菜单 (树状结构)全部菜单项有2000多条, 菜单主要用在系统的上边导航 还有左边的菜单树
地市/分公司列表 这个不多 (毕竟联通占有率不高) 但是也有3位数了
这个应用场景极其的多, 很多操作又要用到, 相当于一个字典表
地市分公司部门列表 全部数据2000条左右,也相当于字典表
以上四种数据控制的"最小粒度"都是基于"人"的, 也就是说每个操作员操作系统时看到的都是不一样的.
这个系统同时在线人数5000多.
对于当时的运行环境来说, web服务器是有N多台 而且很好很强大, 但是数据库并没有那么多.(对数据库做群集?太疯狂了吧).
这种类似字典表的东西通常都是取出来放到缓存里,缓存可以借助ehcache之类的组件来实现.以此来减少对数据库的操作.
但是对于上面的情况, 显然是做不到的, 因为 判断一个数据项,是否对于当前的操作员可见,要进行复杂的判断,而且要对数据项做全遍历. 而如果不缓存,每次都从数据库去取 ,这么做同样是不可取的.
所以,最好的方法就是 用运行在web服务器上的"内存数据库"来实现一个支持 sql的 高级缓存.
===================================
再拿游戏举下例子,游戏的存档就是一个小型的数据库,如果有嵌入式数据库帮忙开发游戏的话,就不用为存档系统大动干戈了,
还有, NBA LIVE系列游戏里面包含了大量的球队和球员历史信息,这些信息就是被存在一个嵌入式数据库里的.如果没有嵌入式数据库,那么游戏中检索这些球员的数据将是多么繁琐的事情啊.
同时嵌入式数据库还可以用来加密. 把软件运行时需要的资源(数据 文件 图片等)放到嵌入式数据库里, 运行时"查询出".
免得自己再写一套机密机制.
===================================
以上说了这么多, 只是想说明一下, 嵌入式内存数据库其实用处真的蛮大的. 而且用法很灵活,
套用一句俗话"它是否有用并不取决于它自身 而是取决于我们的想象力"
为了让它不再被继续低估,我打算为推广和宣传它贡献出自己的一点点力量.
=================================
先来个简介.
h2database 官方网站
http://www.h2database.com/
这个是一个 java编写的轻量级数据库.
类似的轻量级数据库实际上有很多, 例如java自带的derby,还有历史悠久的hsqldb,postgreSQL,sqlite...
和这些前辈比起来似乎他的来头小了一点.但是它绝对绝对绝对足够出色足够优秀.
我第一次接触他大概是在两年前, 使用它之后我就几乎再也没用过其他轻量级数据库了.(之前用过hsqldb mysql postgresql)
它完全开源, 小巧, 纯java编写,只有一个不到1M的jar(已经包含了jdbc驱动) , 不依赖任何第三方的组件.
支持多种数据库模式: c/s模式(相当于一个轻量级的mysql), 内存模式(相当于一个轻量级的内存数据库), 嵌入式模式.
支持多种连接方式. 支持hibernate.
拥有详尽出色的文档.这是我见过的最出色的开源软件文档之一.完全可以作为一本学习数据库的教材来使用.
由于全部由java编写,所以可以用java对它进行全面的控制,例如 启动/停止服务, 管理帐号等等.
当然,如果它不与java的程序配合使用,那么优势就减少很多,因为毕竟还需要jdk支持.
=================================
和其他轻量级数据库的特性对比:
它还有如下主要特性:
更多的详细说明见: http://www.h2database.com/html/features.html
下面是性能对比
(此处只是c/s模式下的对比, 这里 http://www.h2database.com/html/performance.html 还有更多的对比):
当然,它也有缺点,但是它的缺点往往只有在把它应用到它并不适合的场景(高并发 大数据量)时才会体现的比较明显.
=================================
H2DB出现也有很长时间了, 但是名气一直不大,我觉得并不是他的品质造成的,而是因为它的背后缺少大型的商业的组织支持.
近期我也正打算写一些H2DB的文章,来为h2db的普及做一些贡献,敬请期待.
JE上以前也有一些介绍性文章
大家可以自行搜索一下
在"介绍""概述"方面 显然其他作者比我更擅长 :D
==================================
补充
==================================
针对robbin 的回复补充一个现实中的一个场景:
以前给某公司做BSS, 遇到了下面的情况.
系统的菜单 (树状结构)全部菜单项有2000多条, 菜单主要用在系统的上边导航 还有左边的菜单树
地市/分公司列表 这个不多 (毕竟联通占有率不高) 但是也有3位数了
这个应用场景极其的多, 很多操作又要用到, 相当于一个字典表
地市分公司部门列表 全部数据2000条左右,也相当于字典表
以上四种数据控制的"最小粒度"都是基于"人"的, 也就是说每个操作员操作系统时看到的都是不一样的.
这个系统同时在线人数5000多.
对于当时的运行环境来说, web服务器是有N多台 而且很好很强大, 但是数据库并没有那么多.(对数据库做群集?太疯狂了吧).
这种类似字典表的东西通常都是取出来放到缓存里,缓存可以借助ehcache之类的组件来实现.以此来减少对数据库的操作.
但是对于上面的情况, 显然是做不到的, 因为 判断一个数据项,是否对于当前的操作员可见,要进行复杂的判断,而且要对数据项做全遍历. 而如果不缓存,每次都从数据库去取 ,这么做同样是不可取的.
所以,最好的方法就是 用运行在web服务器上的"内存数据库"来实现一个支持 sql的 高级缓存.
===================================
再拿游戏举下例子,游戏的存档就是一个小型的数据库,如果有嵌入式数据库帮忙开发游戏的话,就不用为存档系统大动干戈了,
还有, NBA LIVE系列游戏里面包含了大量的球队和球员历史信息,这些信息就是被存在一个嵌入式数据库里的.如果没有嵌入式数据库,那么游戏中检索这些球员的数据将是多么繁琐的事情啊.
同时嵌入式数据库还可以用来加密. 把软件运行时需要的资源(数据 文件 图片等)放到嵌入式数据库里, 运行时"查询出".
免得自己再写一套机密机制.
===================================
以上说了这么多, 只是想说明一下, 嵌入式内存数据库其实用处真的蛮大的. 而且用法很灵活,
套用一句俗话"它是否有用并不取决于它自身 而是取决于我们的想象力"
评论
fins
12 小时前
商用价值就一定要"高并发 大数据量"??
多高算高 多大算大?
而且它和传统的大型数据库是互为补充的关系 不是谁代替谁的关系
另外有朋友已经用在商业里了
我和他交流了一下 "高并发查询是极快的".
总之 在商业中使用时一定要合理利用 想用来代替完全代替oracle db2 mysql 是不可能的
至于怎么用, 那要看项目的需求以及使用者的想象力.
多高算高 多大算大?
而且它和传统的大型数据库是互为补充的关系 不是谁代替谁的关系
另外有朋友已经用在商业里了
我和他交流了一下 "高并发查询是极快的".
总之 在商业中使用时一定要合理利用 想用来代替完全代替oracle db2 mysql 是不可能的
至于怎么用, 那要看项目的需求以及使用者的想象力.
sniperking
前天
高并发 大数据量的情况不能用,那还有商用价值吗?只能学习用了
fins
前天
看来大家都比我了解h2啊 哈哈
我只是接触的比较早 但是用的还真不深
我得再专研专研
我只是接触的比较早 但是用的还真不深
我得再专研专研
mhere
前天
愈发感觉这个东西 好啊~~~~
heiheben
前天
我觉得 Azi 对H2还是很了解的
lxy19791111
前天
使用过,感觉还不错
Azi
前天
其实呢,2G不是H2的上限。就是写数据达到2G的时候,再执行查询的时候变得非常缓慢。用起来非常的慢而已。
neora
前天
引用
H2Database只是不能支持大数据,曾经用来一个项目,超过2G就不行了
========================
这个取决你的操作系统
========================
这个取决你的操作系统
这是由OS文件系统限制的,目前绝大多数操作系统的版本没这个问题了。如果OS较老,MySQL的单表也有这个限制。
csrcom
2008-05-09
H2Database只是不能支持大数据,曾经用来一个项目,超过2G就不行了
========================
这个取决你的操作系统
========================
这个取决你的操作系统
Quake Wang
2008-05-08
针对于你提到的这个用法:
所以,最好的方法就是 用运行在web服务器上的"内存数据库"来实现一个支持 sql的 高级缓存.
我推荐一下JoSQL
http://www.javaeye.com/topic/76967
引用
所以,最好的方法就是 用运行在web服务器上的"内存数据库"来实现一个支持 sql的 高级缓存.
我推荐一下JoSQL
http://www.javaeye.com/topic/76967
neora
2008-05-08
h2的全文检索功能是用apache Lucene实现的。
neora
2008-05-08
已经用了1年了,很不错。
yuankai
2008-05-08
To Azi
为什么我写create database test创建不了?是语法不对还是怎么回事?
还有就是在console写sql脚本为什么不能多行执行啊?在console写两句sql选择一行执行,总是两句都一起执行了。
为什么我写create database test创建不了?是语法不对还是怎么回事?
还有就是在console写sql脚本为什么不能多行执行啊?在console写两句sql选择一行执行,总是两句都一起执行了。
fins
2008-05-08
不行啊 能力有限啊 数据库这个领域还是很高深的
光那些算法就够我研究好几年的了
我只能从使用层面写些东西
光那些算法就够我研究好几年的了
我只能从使用层面写些东西
Azi
2008-05-08
强烈建议fins老大把H2的代码分析一下。想知道其原理。
Azi
2008-05-08
执行一个sql语句就创建数据库了。
yuankai
2008-05-08
请问下H2是不是不提供建数据库的命令!要想建议个数据库该怎么办?
Azi
2008-05-08
你可以设置压缩方式来存储了。但是现在硬盘不是问题。。。
fins
2008-05-08
??你在判断大小时判断的是哪几个文件啊?
我觉得你判断的方法不对
你可能把 track log 等等一些非数据库文件也计算进去了
实际上 h2一个数据库的核心文件只有两个
而生成的其他的那些都是可以删除 或者通过开关来设置掉的
他不会比 hsqldb 大的. hsqldb那个才叫过分.
我觉得你判断的方法不对
你可能把 track log 等等一些非数据库文件也计算进去了
实际上 h2一个数据库的核心文件只有两个
而生成的其他的那些都是可以删除 或者通过开关来设置掉的
他不会比 hsqldb 大的. hsqldb那个才叫过分.
RyanPoy
2008-05-08
曾经用过这个。且做过一些对比。相对而言,h2的速度是快。但是有一点要说的是。它的存储文件大小似乎很大。曾经测试过,数据量忘了。好像是10w条。它占用了100多M的空间,而其他的几个占用的空间很小。
发表评论
- 浏览: 651251 次
- 性别:

- 来自: 小胖儿的大城

- 详细资料
搜索本博客
我的相册
mayday0430_1
共 60 张
共 60 张
链接
最新评论
-
一个值得关注的ajax框架-- ...
>付费使用版每套暂定价为 90 元,付费用户可终生免费升级程 >序。 意思是一 ...
-- by carlosbdw -
让我失望至极的 opera dra ...
同意你的说法 只是这次他们弄的很高调 结果东西很烂 炒作没炒好 把自己给烫了
-- by fins -
h2database 普及系列一: ...
商用价值就一定要"高并发 大数据量"?? 多高算高 多大算大? 而且它和传统的 ...
-- by fins -
h2database 普及系列一: ...
高并发 大数据量的情况不能用,那还有商用价值吗?只能学习用了
-- by sniperking -
让我失望至极的 opera dra ...
总之,opera这么做是必须的,而且相当必要的。不这么做,那就太傻了。over。
-- by larryzou






评论排行榜