存档

作者存档

Berkeley DB XML 多线程添加文档例子

2010年3月1日 蔡瀛 10 条评论
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+"";
                        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();
        }

}

Berkeley DB Xml 2.5 新特性详解一: 概述

2009年9月15日 蔡瀛 20 条评论

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. 更高效的节点存储模式

阅读全文…

Berkeley DB Xml 入门系列之二: 在Linux下编译和使用Berkeley DB Xml

2009年7月22日 蔡瀛 9 条评论

在前面的文章《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。

阅读全文…

Berkeley DB Xml 入门系列之一: 简介与”query”示例程序详解

2009年7月22日 蔡瀛 26 条评论

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 中的一些基本概念。 阅读全文…

使用Visual C++ 2008 Express Edition 编译Oracle Berkeley DB XML

2009年4月5日 蔡瀛 2 条评论

摘要:本文介绍了Oracle Berkeley DB XML, 并描述了使用Microsoft Visual C++ 2008 express edition 在Windows 平台编译Oracle Berkeley DB XML的过程。

关键字:Berkeley DB XML, Windows 平台编译

阅读全文…

Դ