BerkeleyDB使用感受

这两天项目中用到了BerkeleyDB,我们使用的是JAVA版,这是一个纯JAVA写的嵌入式数据库,提供了很高的数据访问和查询速度,在并发的情况下表现也非常好,测试中在数据量比较小的时候每插一万条数据只需要2秒,随着数据量增大到百万级以后这个数字逐渐稳定在5-10秒左右,这个速度甚至超过了MYSQL内存表的速度,用JAVA能写出这么高性能的数据库确实很让人震撼,但是稍微考虑一下之所以可以这么快应该有以下原因:
1:使用JDBC连接MYSQL有TCP传输的开销,而BerkeleyDB因为是嵌入式数据库,所以没有这层开销。
2:在MYSQL中插入数据是通过SQL语句,BerkeleyDB为直接api调用,少了一层SQL解析的开销。
3:MYSQL是一个可靠的数据库,每一条数据都要求准确的写入表中,每一次查询都需要查出准确的结果,而BerkeleyDB是一个不可靠的数据库,对响应速度和执行速度要求更高,对数据的准确性要求不是那么高,这样就可以为了速度牺牲准确性,提以供更高的性能。(BerkeleyDB也可以设置一些参数达到准确性,这样性能肯定不会这么高了)
在实际项目的使用中,用起来还是比较简单,BerkeleyDB的设计是基于键值对的模式,用起来不用写SQL语句,刚开始可能会不太习惯。每个实体里面可以设置一个主键和多个次键,看着文档基本上用是没什么问题的,注意几点就可以了。
1.读数据的时候,用完cursor一定要关掉,不然下次插入会报死锁的错误。
2.程序退出时,如果不想数据库里数据丢失的话,一定要调用close方法,这时它才会自动把数据写到硬盘里,如果你直接kill的话是肯定会丢数据的。
3.想查数据库里面有那些数据,因为没有mysql那样的客户端,是比较麻烦的,只有通过应用自己才会知道,如果需要在外部查的话,建议自己在应用进程中实现一个whois接口。
4.绝对不能用在对数据准确性要求高的地方,出了问题哭都没地方哭去,最好就是用来做缓存,对插入和更新性能要求很高,数据丢了也无所谓的场合。

你可能感兴趣的:(java,sql,数据库,mysql,jdbc,嵌入式)