db4o Java版性能测试评估

db4o性能测试评估,最近想选择一个轻量、可伸缩、高性能的嵌入式数据库,所以对db4o Java版数据库进行了测试评估。从结果看来db4o Java版还是值得试一试,插入和删除记录性能和Berkeley DB Java版差不多,但是查询性能似乎差一些

版本:

db4o-6.4.54.11278-java5.jar

结果:

Elapsed time for inserting 100000 records: 8063 milliseconds
Elapsed time for performing 200000 index searches: 28312 milliseconds
Elapsed time for deleting 100000 records: 11265 milliseconds

代码:

import com.db4o.config.*;
import com.db4o.query.*;
import com.db4o.*;

import java.io.*;
import java.util.*;


public class Testdb4oIndex {
   
    public static class Record {
        String strKey;
        long   intKey;
    };

    public static class Assert {
        public static void that(boolean condition) {
            if (!condition) {
                throw new Error("Assertion failed");
            }
        }
    }
   
    static final String FILE = "testindex.yap";
   
    final static int nRecords = 100000;

    static public void main(String[] args) {
       
        new File(FILE).delete();
       
        Configuration conf = Db4o.configure();
       
        conf.objectClass(Record.class).objectField("strKey").indexed(true);
        conf.objectClass(Record.class).objectField("intKey").indexed(true);

        conf.weakReferences(false);
        conf.discardFreeSpace(Integer.MAX_VALUE);
        conf.automaticShutDown(false);
        conf.lockDatabaseFile(false);
       
        ObjectContainer db = Db4o.openFile(FILE);

        long start = System.currentTimeMillis();
        long key = 1999;
        int i;       
        for (i = 0; i < nRecords; i++) {
            Record rec = new Record();
            key = (3141592621L*key + 2718281829L) % 1000000007L;
            rec.intKey = key;
            rec.strKey = Long.toString(key);
            db.set(rec);
        }
        db.commit();
        System.out.println("Elapsed time for inserting " + nRecords + " records: "
                           + (System.currentTimeMillis() - start) + " milliseconds");
        start = System.currentTimeMillis();
        key = 1999;
        for (i = 0; i < nRecords; i++) {
            key = (3141592621L*key + 2718281829L) % 1000000007L;
            Query q = db.query();
            q.constrain(Record.class);
            q.descend("intKey").constrain(new Long(key));
            Record rec1 = (Record)q.execute().next();
            q = db.query();
            q.constrain(Record.class);
            q.descend("strKey").constrain(Long.toString(key));
            Record rec2 = (Record)q.execute().next();
            Assert.that(rec1 != null && rec1 == rec2);
        }
        System.out.println("Elapsed time for performing " + nRecords*2 + " index searches: "
                           + (System.currentTimeMillis() - start) + " milliseconds");
       
        start = System.currentTimeMillis();

        Query q = db.query();
        q.constrain(Record.class);
        ObjectSet objectSet = q.execute();
       
        while(objectSet.hasNext()){
            db.delete(objectSet.next());
        }
        db.commit();
        System.out.println("Elapsed time for deleting " + nRecords + " records: "
                           + (System.currentTimeMillis() - start) + " milliseconds");
        db.close();
    }
}

你可能感兴趣的:(database)