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