嵌入式数据库BERKELEY DB 之dubbo实战

本文介绍了Berkeley DB作为嵌入式数据库在Java环境下的应用,特别是与dubbo集成的实战经验。Berkeley DB提供高速访问、节省空间的特性,支持ACID事务和多种数据结构。在Java Edition中,讨论了Environment配置、内存缓存以及API使用。文章还详细阐述了BDB的高可用方案,包括服务发现、主从同步策略、异常分类和监控。最后提到了在dubbo中实现Berkeley DB服务的注意事项,如避免特殊字符、避免使用Docker存储数据库文件。
摘要由CSDN通过智能技术生成

berkeley db 时oracle旗下的一款嵌入式数据库。。。当然,在互联网业界,他并不火,但是它确实很省内存,,对于一些想要替换redis的解决方案--可以考虑。。想要学习它。甚至在一些主流的网站上看不到它的相关资料。。。此时我们可以结合官网来进行学习和实践。本文集合dubbo+berkeley 来阐述下小编的实战以及需要注意的问题。。。。

1.Berkeley DB简介

Berkeley DB是一个开源的文件数据库,介于关系数据库与内存数据库之间,使用方式与内存数据库类似,它提供的是一系列直接访问数据库的函数,而不是像关系数据库那样需要网络通讯、SQL解析等步骤。它是一个嵌入式数据库系统,其设计思想是简单、小巧、可靠、高性能。可以和Java, C++, Python..以及其他很多语言都有绑定。可以保存任意类型的键/值对,而且可以为一个键保存多个数据。Berkeley DB可以支持数千的并发线程同时操作数据库,支持最大256TB的数据

 

数据结构

Berkeley DB以拥有比SQLServer和Mysql等数据库系统而言更简单的体系结构。它是通过进程内的API访问数据库。不支持表结构和数据列。访问数据库的程序自主决定数据如果存储在记录里。每个记录只有两部分:键、值,所以通常用key/data pair指代一个记录。记录和它的键都可以达到4G字节的长度。
支持ACID数据库事务处理,细粒度锁,热备份以及同步复制。
支持HASH、Recno、QUEUE、B+Tree 4种算法

B+树算法
B+树是一个平衡树,关键字有序存储,并且其结构能随数据的插入和删除进行动态调整。为了代码的简单,DB没有实现对关键字的前缀码压缩。B+树支持对数据查询、插入、删除的常数级速度。关键字可以为任意的数据结构.
HASH算法
DB中实际使用的是扩展线性HASH算法(extended linear hashing),可以根据HASH表的增长进行适当的调整。关键字可以为任意的数据结构。要求每一个记录都有一个逻辑纪录号,逻辑纪录号由算法本身生成。
RECNO算法
Recno建立在B+树算法之上,提供了一个存储有序数据的接口。记录的长度可以为定长或不定长。 
Queue算法
Queue算法只能存储定长的记录,在高的并发处理情况下,Queue算法效率较高;如果是其它情况,则选择Recno算法,Recno算法把数据存储为平面文件格式。和Recno方式接近, 只不过记录的长度为定长。数据以定长记录方式存储在队列中,插入操作把记录插入到队列的尾部,相比之下插入速度是最快的。

对算法的选择首先要看关键字的类型,如果为复杂类型,则只能选择B+树或HASH算法,如果关键字为逻辑记录号,则应该选择Recno或Queue算法。当工作集关键字有序时,B+树算法比较合适;如果工作集比较大且基本上关键字为随机分布时,选择HASH算法。

特点

访问速度快、省硬盘空间Berkeley DB可以轻松支持上千个线程同时访问数据库,支持多进程、事务等特性。Berkeley DB运行在大多数的操作系统中,例如大多数的UNIX系统, 和windows系统,以及实时操作系统。

Berkeley DB 还拥有对一些老的UNIX数据库,例如dbm, ndbm und hsearch的兼容接口.
对于在java系统中的使用,Berkeley DB提供了一个压缩成jar单个文件的java版本。 这个版本可以运行在java虚拟机上使用,并且拥有和C语言版本相同的所有操作和功能。

Berkeley DB只支持单一的数据结构,它的所有数据包括两个部分:key 和 data.
Berkeley DB原则上是为嵌入式数据库设计的。

 

 

2.JE - Java Edition

Berkeley DB Java Edition (JE)是一个完全用JAVA写的, 提供DB操作的API集合

Environment 相当于一个磁盘上的目录路径,你可以用nvironments找到所有的文件也可以用于管理资源,比如事务。当用一个Environment对象实例打开DB,你的环境实例也可以叫做环境句柄.每次访问、

                每次存储、访问数据都需要打开environment, 在你使用完后需要关闭。

Database environments. Database environments provide a unit of encapsulation and management for one or more databases.
Environment myDbEnv;
EnvironmentConfig envConfig = new EnvironmentConfig();
envConfig.setAllowCreate(true);
myDbEnv = new Environment(new File("/export/dbEnv"), envConfig);

In-memory cache:

你需要谨慎的考虑设置多大的cahce. 如果你设置的太低,将会产生一些不必要的磁盘访问导致性能下降,如果你设置的太高,可能会浪费本地内存。
注意这个in-memory的最大size设置,在项目启动的时候,这个缓存将会非常小,一般是最大设置的7%被允许缓存数据。后面会根据你程序的操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值