woaidongmao

文章均收录自他人博客,但不喜标题前加-[转贴],因其丑陋,见谅!~
随笔 - 1469, 文章 - 0, 评论 - 661, 引用 - 0
数据加载中……

BerkeleyDB 数据丢失,及使用感受

这两天项目中用到了BerkeleyDB,我们使用的是JAVA版,这是一个纯JAVA写的嵌入式数据库,提供了很高的数据访问和查询速度,在并发的情况下表现也非常好,测试中在数据量比较小的时候每插一万条数据只需要2秒,随着数据量增大到百万级以后这个数字逐渐稳定在5-10秒左右,这个速度甚至超过了MYSQL内存表的速度,用JAVA能写出这么高性能的数据库确实很让人震撼,但是稍微考虑一下之所以可以这么快应该有以下原因:


1
:使用JDBC连接MYSQLTCP传输的开销,而BerkeleyDB因为是嵌入式数据库,所以没有这层开销。

2:在MYSQL中插入数据是通过SQL语句,BerkeleyDB为直接api调用,少了一层SQL解析的开销。

3MYSQL是一个可靠的数据库,每一条数据都要求准确的写入表中,每一次查询都需要查出准确的结果,BerkeleyDB是一个不可靠的数据库,对响应速度和执行速度要求更高,对数据的准确性要求不是那么高,这样就可以为了速度牺牲准确性,提以供更高的性能。(BerkeleyDB也可以设置一些参数达到准确性,这样性能肯定不会这么高了)


在实际项目的使用中,用起来还是比较简单,BerkeleyDB的设计是基于键值对的模式,用起来不用写SQL语句,刚开始可能会不太习惯。每个实体里面可以设置一个主键和多个次键,看着文档基本上用是没什么问题的,注意几点就可以了。


1.读数据的时候,用完cursor一定要关掉,不然下次插入会报死锁的错误

2.程序退出时,如果不想数据库里数据丢失的话,一定要调用close方法,这时它才会自动把数据写到硬盘里,如果你直接kill的话是肯定会丢数据的。


3.想查数据库里面有那些数据,因为没有mysql那样的客户端,是比较麻烦的,只有通过应用自己才会知道,如果需要在外部查的话,建议自己在应用进程中实现一个whois接口。

4.绝对不能用在对数据准确性要求高的地方,出了问题哭都没地方哭去,最好就是用来做缓存,对插入和更新性能要求很高,数据丢了也无所谓的场合。

 

posted on 2012-06-01 16:08 肥仔 阅读(1026) 评论(0)  编辑 收藏 引用 所属分类: 数据库


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理