设为首页 收藏本站
查看: 2648|回复: 0

[经验分享] h2database,一个内存数据库解决方案

[复制链接]

尚未签到

发表于 2016-11-22 09:32:02 | 显示全部楼层 |阅读模式
这不是一个新东西,但是它却是一个被严重低估的东西.
为了让它不再被继续低估,我打算为推广和宣传它贡献出自己的一点点力量.
=================================
先来个简介.
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支持.
=================================
和其他轻量级数据库的特性对比:
DSC0000.png

它还有如下主要特性:

更多的详细说明见:  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系列游戏里面包含了大量的球队和球员历史信息,这些信息就是被存在一个嵌入式数据库里的.如果没有嵌入式数据库,那么游戏中检索这些球员的数据将是多么繁琐的事情啊.
同时嵌入式数据库还可以用来加密. 把软件运行时需要的资源(数据 文件 图片等)放到嵌入式数据库里, 运行时"查询出".
免得自己再写一套机密机制.
===================================
以上说了这么多, 只是想说明一下, 嵌入式内存数据库其实用处真的蛮大的. 而且用法很灵活,
套用一句俗话"它是否有用并不取决于它自身 而是取决于我们的想象力"

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-303825-1-1.html 上篇帖子: [转]ALTER TABLE的用法 增加列、删除列、改列名、改列约束、改表名 下篇帖子: 【转】基于GeoServer的电子地图系统说明(五):基于GeoServer的WebGIS的实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表