存档

2010年3月1日 的存档

Berkeley DB 批量插入更新与删除用法示例

2010年3月1日 davidzhao 没有评论

在Berkeley DB 4.8之前,我们可以执行的唯一的批量数据库操作是批量读取。
从Berkeley DB 4.8开始,Berkeley DB支持批量插入/更新/删除,并且用法也与批量读取相似。
批量插入/更新/删除对Berkeley DB的更新性能提升非常大,是一个值得认真学习的新功能。
本文就以一个示例程序展示批量插入和批量删除的用法。
阅读全文…

分类: Berkeley DB, David Zhao 标签:

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();
        }

}
Դ