Oracle Berkeley DB最先由加州大学伯克利分校为了移除受到AT&T限制的dbm代码,而从BSD 4.3到4.4时所改写的。经过将近二十年的衍化,目前Oracle Berkeley DB家族已经发展到包含4个独立产品线 – Berkeley DB、Berkeley DB Java 版、Berkeley DB XML和Mobile Server,被应用到行行业业,在全球有超过2亿的部署。
本文将分别介绍Oracle Berkeley DB四大产品线的特点以及应用,希望能对中国市场的新老用户有所启发和帮助。
阅读全文…
import java.io.File;
import java.util.concurrent.CountDownLatch;
import com.sleepycat.db.Environment;
import com.sleepycat.db.EnvironmentConfig;
import com.sleepycat.db.LockDetectMode;
import com.sleepycat.dbxml.XmlContainer;
import com.sleepycat.dbxml.XmlContainerConfig;
import com.sleepycat.dbxml.XmlDocument;
import com.sleepycat.dbxml.XmlDocumentConfig;
import com.sleepycat.dbxml.XmlException;
import com.sleepycat.dbxml.XmlManager;
import com.sleepycat.dbxml.XmlManagerConfig;
import com.sleepycat.dbxml.XmlQueryContext;
import com.sleepycat.dbxml.XmlResults;
import com.sleepycat.dbxml.XmlTransaction;
import com.sleepycat.dbxml.XmlUpdateContext;
public class DbxmlThreads extends Thread {
public static XmlManager mgr = null;
public static String containerName = "test.dbxml";
public static Environment dbEnv = null;
private static XmlContainer cont = null;
static {
EnvironmentConfig envConf = new EnvironmentConfig();
envConf.setThreaded(true);
envConf.setAllowCreate(true);
envConf.setTransactional(true);
envConf.setInitializeCache(true);
envConf.setInitializeLocking(true);
envConf.setInitializeLogging(true);
envConf.setCacheSize(64 * 1024 * 1024);
envConf.setLockDetectMode(LockDetectMode.DEFAULT);
XmlManagerConfig xmlMgrConfig = new XmlManagerConfig();
xmlMgrConfig.setAdoptEnvironment(true);
File dbHome = new File(".");
try {
dbEnv = new Environment(dbHome, envConf);
mgr = new XmlManager(dbEnv, xmlMgrConfig);
// 创建XmlContainer
if(mgr.existsContainer(containerName)!=0)
mgr.removeContainer(containerName);
XmlContainerConfig containerConf = new XmlContainerConfig();
containerConf.setTransactional(true);
containerConf.setAllowCreate(true);
containerConf.setContainerType(XmlContainer.NodeContainer);
cont = mgr.openContainer(containerName, containerConf);
cont.setAutoIndexing(false);
} catch (Exception e) {
e.printStackTrace();
}
}
private String name;
private CountDownLatch doneSignal;
DbxmlThreads(String name, CountDownLatch doneSignal) {
this.name = name;
this.doneSignal = doneSignal;
}
public void run() {
XmlTransaction txn = null;
try {
String content = "<"+name+">I am "+name+""+name+">";
for (int i = 0; i < 100; i++) {
XmlDocumentConfig dc = new XmlDocumentConfig();
dc.setGenerateName(true);
System.out.println(name+" insert "+i);
txn = mgr.createTransaction();
XmlDocument doc = mgr.createDocument();
doc.setContent(content);
cont.putDocument(txn, doc, dc);
txn.commit();
}
} catch (XmlException e) {
System.out.println("insert error:" + e.getMessage());
} finally {
doneSignal.countDown();
}
}
public static void main(String[] args) throws Exception {
CountDownLatch doneSignal = new CountDownLatch(5);
DbxmlThreads threadA = new DbxmlThreads("A", doneSignal);
DbxmlThreads threadB = new DbxmlThreads("B", doneSignal);
DbxmlThreads threadC = new DbxmlThreads("C", doneSignal);
DbxmlThreads threadD = new DbxmlThreads("D", doneSignal);
DbxmlThreads threadE = new DbxmlThreads("E", doneSignal);
threadA.start();
threadB.start();
threadC.start();
threadD.start();
threadE.start();
doneSignal.await();
XmlQueryContext qc = mgr.createQueryContext();
String query = "collection('"+containerName+"')/A";
XmlResults res = mgr.query(query, qc);
System.out.println("The results size is: "+res.size());
res.delete();
cont.close();
mgr.close();
}
}
近十年来,XML应用越发广泛,政府也推出了《基于XML的电子公文格式规范》等标准。那么,在需要XML数据库引擎的情况下,采用原生XML数据库Berkeley DB XML(以下简称BDB XML)取代MySQL(或其它传统DB)做后台数据库是一个更好的选择。
BDB XML是Oracle推出的一款开源原生XML数据库。与传统数据库相比,原生XML数据库的优势有:
1. 可以直接操作XML文件,XML数据无损–在某些场合,无损的数据源意味着法律效力。
2. 原生检索方式,支持XQuery和XPath,符合XML习惯。
3. 性能优化:原生XML数据库会针对XML特点进行各种优化,如插入文档索引、建立节点ID等。
4. 支持相同数据的不同视图。
和其它原生XML数据库相比,BDB XML优势有:
1. 完整的ACID 事务处理、自动恢复、热备份、用于分布式事务的HA支持。
2. 支持XQuery(含XQuery Update)和XPATH。
3. 可以利用其特有的二进制元数据存取大容量二进制对象(非XML数据)。
4. 支持全Unicode字符集,中文存储、查询都不成问题。
5. 提供一套容器和迭代器接口访问和操作查询结果。
6. 提供交互式命令行工具。
阅读全文…
2009年9月14日,Berkeley DB Xml 发布了最新的2.5版本 (包含最新发布的Berkeley DB 4.8版本),此版本增加了新功能,并对上一个版本的所有bug进行了修复,是一个更快更加稳定的版本,推荐大家升级。下载地址在:http://www.oracle.com/technology/software/products/berkeley-db/index.html。 Berkeley DB Xml 2.5 新特性主要有一下几个方面:
1. 自建索引
2. 在wholeDocument存储模式下的压缩存储
3. Debugging API 和 debug 命令
4. 用户自定义XQuery external 函数
5. XmlResults 增强
6. 更高效的节点存储模式
阅读全文…
1. 简介
Berkeley DB Xml Shell(以下简称DbXml Shell)是包含在发行包里的工具,可运行于UNIX家族平台(Linux, Solaris, HP-UX, Mac OS, Cygwin, AIX, FreeBSD…)和Windows平台上。DbXml Shell包含Berkeley DB XML的绝大多数常用功能,可以让我们在不编写一行代码的情况下,通过指令快速完成多种常用操作如创建/删除容器、插入/删除文档、查询、验证Query Plan等等,实为居家旅行必备佳品。要是在周五下午遭受紧急任务袭击,就更得靠它来拯救周末了。有时为了解决开发中遇到的问题,只要写一个非常简短的DbXml Shell脚本就可以实现预期功能或是重现环境,极大地提高了劳动生产率。
阅读全文…
在前面的文章《Berkeley DB Xml 入门系列之一: 简介与”query”示例程序详解》我们已经知道了Berkeley DB Xml程序的一些基本流程和概念。在文章《使用Visual C++ 2008 Express Edition 编译Oracle Berkeley DB XML》介绍了如何使用Visual Studio 在Windows平台上编译Berkeley DB Xml,本文将介绍在Linux或者类Unix的操作系统上如何编译和使用Berkeley DB Xml。
阅读全文…
Oracle Berkeley DB XML 是一个可嵌入的开源 XML 数据库(Embedded Native Xml Database),可基于 XQuery 访问存储在容器中的文档,并对其内容进行索引。Oracle Berkeley DB XML 构建于 Oracle Berkeley DB 之上,并继承了其丰富的特性和属性(包括 环境,各个级别的事务,Replication等)。与Oracle Berkeley DB 一样,它通过应用程序运 行,无需人为管理。Oracle Berkeley DB XML 主要功能模块包括有文档分析器、XML索引 器以及 XQuery 引擎,实现了最快速、最高效的Xml数据检索。
本文是Berkeley DB Xml入门系列文章的第一篇,此系列将会详细介绍Berkeley DB Xml的 使用和编程,并探讨一些Berkeley DB Xml 编程中的高级内容,欢迎大家关注。在这篇文章里面我们通过一个最简单查询例子,介绍最基本Berkeley DB Xml的编程流程,并介绍 Berkeley DB Xml 中的一些基本概念。 阅读全文…
摘要:本文介绍了Oracle Berkeley DB XML, 并描述了使用Microsoft Visual C++ 2008 express edition 在Windows 平台编译Oracle Berkeley DB XML的过程。
关键字:Berkeley DB XML, Windows 平台编译
阅读全文…
Berkeley DB 开源社区的Brett Zamir基于XQuery/BDBXML做了一个Firefox的Add-on, 叫XqUSEme (https://addons.mozilla.org/en-US/firefox/addon/5515)。感兴趣的同学可以下载试试。
Brett Zamir在创建XqUSEme初期与Berkeley DB开发工程师的讨论在: http://forums.oracle.com/forums/thread.jspa?messageID=2239564。
有心的朋友,不知道有考虑过智能手机+浏览器+BDBXML的组合吗?欢迎和我讨论。
最近评论