`

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上以前也有一些介绍性文章
大家可以自行搜索一下
在"介绍""概述"方面 显然其他作者比我更擅长


==================================
补充
==================================


针对robbin 的回复补充一个现实中的一个场景:

以前给某公司做BSS, 遇到了下面的情况.

系统的菜单 (树状结构)全部菜单项有2000多条, 菜单主要用在系统的上边导航 还有左边的菜单树
地市/分公司列表 这个不多 (毕竟联通占有率不高) 但是也有3位数了
这个应用场景极其的多, 很多操作又要用到, 相当于一个字典表
地市分公司部门列表 全部数据2000条左右,也相当于字典表

以上四种数据控制的"最小粒度"都是基于"人"的, 也就是说每个操作员操作系统时看到的都是不一样的.

这个系统同时在线人数5000多.

对于当时的运行环境来说,  web服务器是有N多台 而且很好很强大, 但是数据库并没有那么多.(对数据库做群集?太疯狂了吧).

这种类似字典表的东西通常都是取出来放到缓存里,缓存可以借助ehcache之类的组件来实现.以此来减少对数据库的操作.

但是对于上面的情况, 显然是做不到的, 因为 判断一个数据项,是否对于当前的操作员可见,要进行复杂的判断,而且要对数据项做全遍历.  而如果不缓存,每次都从数据库去取 ,这么做同样是不可取的.

所以,最好的方法就是  用运行在web服务器上的"内存数据库"来实现一个支持 sql的 高级缓存.

===================================

再拿游戏举下例子,游戏的存档就是一个小型的数据库,如果有嵌入式数据库帮忙开发游戏的话,就不用为存档系统大动干戈了,
还有, NBA LIVE系列游戏里面包含了大量的球队和球员历史信息,这些信息就是被存在一个嵌入式数据库里的.如果没有嵌入式数据库,那么游戏中检索这些球员的数据将是多么繁琐的事情啊.
同时嵌入式数据库还可以用来加密. 把软件运行时需要的资源(数据 文件 图片等)放到嵌入式数据库里, 运行时"查询出".
免得自己再写一套机密机制.

===================================

以上说了这么多, 只是想说明一下, 嵌入式内存数据库其实用处真的蛮大的. 而且用法很灵活,
套用一句俗话"它是否有用并不取决于它自身 而是取决于我们的想象力"
31
3
分享到:
评论
40 楼 流浪鱼 2012-05-02  
哈哈,可以看看
39 楼 Arden 2008-09-04  
timesten好象直接可以从oracle网站使用,也不用花钱照样用,timesten肯定比h2要强了吧。
38 楼 zhuyx808 2008-08-06  
哦,没看下面的评论,只看了文章,还是我先测试下在看了,有问题再请教了
37 楼 zhuyx808 2008-08-06  
引用
当然,它也有缺点,但是它的缺点往往只有在把它应用到它并不适合的场景(高并发 大数据量)时才会体现的比较明显.


这个高并发大数据量有没有一个大概的数据?到达多少就是到这个数据库的瓶颈了?
36 楼 spiritfrog 2008-05-12  
小实验了一下,确实不错
有个浏览器client
35 楼 yatwql 2008-05-12  
期待更多的文章,一直打算抽个时间仔细看看H2的代码,就想看一下数据库是怎么实现的. 可老是这个借口那个借口没有开始做,惭愧得很.
34 楼 fins 2008-05-11  
商用价值就一定要"高并发 大数据量"??
多高算高 多大算大?

而且它和传统的大型数据库是互为补充的关系 不是谁代替谁的关系

另外有朋友已经用在商业里了

我和他交流了一下 "高并发查询是极快的".

总之 在商业中使用时一定要合理利用 想用来代替完全代替oracle  db2 mysql 是不可能的
至于怎么用, 那要看项目的需求以及使用者的想象力.

33 楼 sniperking 2008-05-10  
高并发 大数据量的情况不能用,那还有商用价值吗?只能学习用了
32 楼 fins 2008-05-09  
看来大家都比我了解h2啊 哈哈

我只是接触的比较早 但是用的还真不深

我得再专研专研
31 楼 mhere 2008-05-09  
愈发感觉这个东西 好啊~~~~
30 楼 heiheben 2008-05-09  
我觉得  Azi   对H2还是很了解的
29 楼 lxy19791111 2008-05-09  
使用过,感觉还不错
28 楼 Azi 2008-05-09  
其实呢,2G不是H2的上限。就是写数据达到2G的时候,再执行查询的时候变得非常缓慢。用起来非常的慢而已。
27 楼 neora 2008-05-09  
引用
H2Database只是不能支持大数据,曾经用来一个项目,超过2G就不行了

========================
这个取决你的操作系统


这是由OS文件系统限制的,目前绝大多数操作系统的版本没这个问题了。如果OS较老,MySQL的单表也有这个限制。
26 楼 csrcom 2008-05-09  
H2Database只是不能支持大数据,曾经用来一个项目,超过2G就不行了

========================
这个取决你的操作系统
25 楼 QuakeWang 2008-05-08  
针对于你提到的这个用法:
引用

所以,最好的方法就是 用运行在web服务器上的"内存数据库"来实现一个支持 sql的 高级缓存.

我推荐一下JoSQL
http://www.iteye.com/topic/76967
24 楼 neora 2008-05-08  
h2的全文检索功能是用apache  Lucene实现的。
23 楼 neora 2008-05-08  
已经用了1年了,很不错。
22 楼 yuankai 2008-05-08  
To Azi
为什么我写create database test创建不了?是语法不对还是怎么回事?
还有就是在console写sql脚本为什么不能多行执行啊?在console写两句sql选择一行执行,总是两句都一起执行了。
21 楼 fins 2008-05-08  

不行啊 能力有限啊 数据库这个领域还是很高深的

光那些算法就够我研究好几年的了

我只能从使用层面写些东西

相关推荐

    H2 Database(H2内存数据库)

    4、H2Database_SQL语法.doc 5、H2Database高级特性.doc 6、H2Database聚合函数.doc 7、H2Database连接配置.doc 8、H2Database数据类型.doc 9、H2Database中文教程.doc 10、H2内存数据库h2部署操作手册.docx 11、H2...

    H2 DataBase学习

    3 jdbc数据库URL:jdbc:h2: test test为h2 database默认提供的测试数据库 4 所有新数据库都会被自动创建 二 h2 database 的控制台">一 简介 h2 database 是一个开源免费的Java SQL数据库 数据库分为嵌入式 ...

    H2Database.rar_H2Database高级特性

    H2Database是一款轻量级、开源的嵌入式和服务器模式的Java数据库,适用于测试、开发和嵌入式系统中的数据存储。它以其高性能、易用性和灵活性而受到开发者的欢迎。本文将深入探讨H2Database的高级特性,帮助你更好地...

    H2Database.rar_H2Database聚合函数_H2数据库函数||_h2数据库修改

    H2Database是一款轻量级、高性能的开源关系型数据库,广泛应用于嵌入式系统和测试环境。它提供了丰富的SQL支持,包括聚合函数,使得在处理大量数据时能够进行高效的统计和分析。本文档将深入探讨H2Database的聚合...

    使用JAVA内存数据库h2database性能优化

    h2database是一款轻量级、高性能的Java内存数据库,特别适合用于处理实时性强、对响应速度要求高的业务逻辑。 2.1 h2database的启动 h2database有两种启动模式:嵌入式和控制台模式。嵌入式模式中,数据库与应用...

    H2Database内存数据库

    2. **连接数据库**:通过JDBC驱动连接H2Database,使用`jdbc:h2:mem:`或`jdbc:h2:`前缀指定内存或文件模式数据库。 3. **创建表和插入数据**:使用SQL语句创建表结构,如`CREATE TABLE ...`,并使用`INSERT INTO .....

    H2Database.rar_H2Database中文教程_h2database_h2database视频

    《H2Database中文教程》是针对数据库管理系统H2Database的一款详尽指南,旨在帮助学习者理解和掌握这款轻量级、高性能的Java嵌入式数据库。H2Database以其易用性、灵活性和广泛的特性集,成为了开发者进行测试和小型...

    H2Database中文教程

    jdbc:h2:file:/path/to/mydb;DB_CLOSE_DELAY=-1 ``` `DB_CLOSE_DELAY=-1`表示即使所有连接关闭,数据库也不会立即关闭,而是等待新连接。 ### Spring Hibernate配置 在Spring和Hibernate框架中配置H2数据库,需要在...

    H2Database-SQL.rar_H2Database-SQL语法_h2database 语法_h2database详解

    H2Database是一款开源、轻量级、内存模式的数据库管理系统,它支持多种SQL标准,包括SQL:2003、SQL:2008和部分SQL:2011。这款数据库广泛应用于测试、开发以及嵌入式系统,因为它的易用性、高性能和灵活性。在"**H2...

    H2DataBase+iBatis简易demo

    【H2DataBase+iBatis简易demo】是一个演示项目,展示了如何将轻量级的H2数据库与流行的Java持久层框架iBatis进行集成。在这个项目中,开发人员使用了MyEclipse作为IDE,并且H2数据库被配置为两种运行模式:内存模式...

    h2database,h2是一个用java编写的可嵌入rdbms。.zip

    H2数据库是一个由Java编写的高性能、轻量级的关系型数据库管理系统(RDBMS),它在许多场景下作为开发和测试的理想选择。由于其开源性质,H2数据库得到了全球开发者社区的支持,允许自由使用、修改和分发。下面将...

    H2Database中文教程.pdf

    此外,H2还提供了一系列命令行工具,方便用户进行各种数据库操作,如数据导入导出、SQL执行等。这些工具可以与OpenOffice进行集成,为用户提供更加丰富的数据处理功能。 在Web应用开发中,H2还支持JNLP(Java ...

    H2 database db zip 安装包

    H2数据库是一个开源、轻量级、嵌入式的Java数据库,适用于各种应用场景,从本地单用户模式到大型多用户服务器模式。它支持多种数据库引擎,包括内存、文件、和分布式模式,可以方便地在开发环境中使用,同时也适合...

    H2 Database Engine

    H2 Database Engine是一款轻量级、高效的开源数据库系统,专为快速开发和临时用途而设计。它的主要特点是其小巧的体积和出色的性能,这使得它成为开发者在进行项目原型设计或者测试环境搭建时的理想选择。H2 ...

    H2 database

    H2数据库,非常好的内存数据库。 H2的优势: 1、h2采用纯Java编写,因此不受...H2比HSQLDB的最大的优势就是h2提供了一个十分方便的web控制台用于操作和管理数据库内容,这点比起HSQLDB的swing和awt控制台实在好用多了。

    内存数据库h2database(h2-2008-11-07)

    内存数据库H2 Database是Java开发的一个轻量级、高性能、开源的关系型数据库系统。它可以在内存中运行,也可以存储在磁盘上,并且支持多种模式,包括单用户模式、服务器模式以及分布式集群模式。H2 Database的设计...

    H2 database source code and document

    H2 database 是一个非常著名的数据库,其性能相当优秀,支持嵌入,client-server模式,支持内存表,cached,text表, 本压缩包 包含 H2 database 源代码和文档 本版本 为最新版本 2010-12-12

    h2 database使用

    配置方面,H2提供了丰富的命令行选项,可以通过`jdbc:h2:` URL来创建或连接数据库。例如,创建一个名为"test"的内存数据库: ```sql jdbc:h2:mem:test ``` **数据类型** H2数据库支持标准的SQL数据类型,如INT、...

    h2database

    H2数据库是一款轻量级、高性能的开源内存数据库系统,主要设计用于嵌入式环境,也可作为独立服务器使用。它的名字“H2”意指“第二个版本的氢”,象征其简洁且快速的特性。H2数据库支持SQL标准,并提供多种数据库...

    H2database

    H2数据库是一款轻量级、高性能的开源关系型数据库,尤其适合于开发人员在本地进行快速测试和原型设计。它的名字“H2”源于“Half a dozen, version 2”,暗示了其小巧且不断进化的特性。这款数据库系统支持多种模式...

Global site tag (gtag.js) - Google Analytics