Yes,commit once for 10000 or 2000 objects can save some time.but if there are 1,000,000 objects in OODB, commit once like this will spend much time too.
Ask questions:
1.My index use is right?
Db4o.configure().objectClass(FPValue.class).objectField("fp0").indexed(true);
Db4o.configure().objectClass(FPValue.class).objectField("fp1").indexed(true);
Db4o.configure().objectClass(FPValue.class).objectField("fp2").indexed(true);
Db4o.configure().objectClass(FPValue.class).objectField("fp3").indexed(true);
Db4o.configure().objectClass(FPValue.class).objectField("currentTimeMillis").indexed(true);
2.My query's performance is highest?
Query query = db.query();
Query pointQuery0 = query.descend("fp0");
Query pointQuery1 = query.descend("fp1");
Query pointQuery2 = query.descend("fp2");
Query pointQuery3 = query.descend("fp3");
query.constrain(FPValue.class).and(
pointQuery0.constrain(fp[0]).equal()).and(
pointQuery1.constrain(fp[1]).equal()).and(
pointQuery2.constrain(fp[2]).equal()).and(
pointQuery3.constrain(fp[3]).equal());
long t1 = System.currentTimeMillis();
ObjectSet result = query.execute();
long t2 = System.currentTimeMillis();
System.out.println("query execute: "+(t2-t1));
com.boco.model.FPValue:
package com.boco.model;
import java.io.Serializable;
/**
*
* @date 2008--07-15
* @author QSH
* @use 到达系统告警的FP
*
*/
public class FPValue{
/**
*
*/
private static final long serialVersionUID = 5744685275674558328L;
private long fp0;
private long fp1;
private long fp2;
private long fp3;
private long currentTimeMillis;
public FPValue(String fp, long currentTimeMillis) {
String fpArray[] = fp.split("_");
this.fp0 = Long.parseLong(fpArray[0]);
this.fp1 = Long.parseLong(fpArray[1]);
this.fp2 = Long.parseLong(fpArray[2]);
this.fp3 = Long.parseLong(fpArray[3]);
this.currentTimeMillis = currentTimeMillis;
}
public long getFp0() {
return fp0;
}
public long getFp1() {
return fp1;
}
public long getFp2() {
return fp2;
}
public long getFp3() {
return fp3;
}
public void setFp0(long fp0) {
this.fp0 = fp0;
}
public void setFp1(long fp1) {
this.fp1 = fp1;
}
public void setFp2(long fp2) {
this.fp2 = fp2;
}
public void setFp3(long fp3) {
this.fp3 = fp3;
}
public long getCurrentTimeMillis() {
return currentTimeMillis;
}
public void setCurrentTimeMillis(long currentTimeMillis) {
this.currentTimeMillis = currentTimeMillis;
}
public String getFp() {
return fp0 + "_" + fp1 + "_" + fp2 + "_" + fp3;
}
@Override
public String toString() {
return "<"+this.getClass().getName() + ">" + fp0 + "_" + fp1 + "_" + fp2
+ "_" + fp3;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + (int) (fp0 ^ (fp0 >>> 32));
result = prime * result + (int) (fp1 ^ (fp1 >>> 32));
result = prime * result + (int) (fp2 ^ (fp2 >>> 32));
result = prime * result + (int) (fp3 ^ (fp3 >>> 32));
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final FPValue other = (FPValue) obj;
if (fp0 != other.fp0)
return false;
if (fp1 != other.fp1)
return false;
if (fp2 != other.fp2)
return false;
if (fp3 != other.fp3)
return false;
return true;
}
}