目前我正在尝试将db4o整合到我的应用程序中。我有一个模型包含 - 可以说15个基元 - 包装在其他对象中。存储他们是容易和快速的,但接受他们是痛苦。我尝试了NativeQuerys和SODA,没有太大区别。为了给它们中的一些索引减慢查询甚至更多。Android上的缓慢db4o查询
实施例中:我有一个查询看起来像这样:上述我希望recievce像存储100所报告的40
public static class DatabaseScheduleReportTimeComparator implements Comparator<DatabaseReport>{
@Override
public int compare(DatabaseReport object1,
DatabaseReport object2) {
long first = object1.getReport().getBegin().getMillis();
long second = object2.getReport().getBegin().getMillis();
if (first < second) return 1;
if (first > second) return -1;
else {
first = object1.getReport().getEnd().getMillis();
second = object2.getReport().getEnd().getMillis();
if (first > second) return 1;
if (first < second) return -1;
else return 0;
}
使用查询
这样:
public List<DatabaseReport> getCurrentDeviationReportsOnly(){
final long now = System.currentTimeMillis();
return getDatabase().query(new Predicate<DatabaseReport>() {
@Override
public boolean match(DatabaseReport candidate) {
return candidate.getReport().getBegin().getMillis() < now
&& candidate.getReport().getEnd().getMillis() > now;
}
}, mTimeComparator);
mTimeComparator被实现为以下。我测量了查询和激活的时间,其约3,5秒!!!对我来说,这看起来非常慢! 我玩了一会儿,并在我的查询中删除了比较器。现在我的执行时间大约为1,2秒。如果我用Collections.sort(myInstantiatedDatabaseReportList, mTimeComparator)
手动对它们进行排序,它将在47 Millis中执行!难道我做错了什么? db4o喜欢比Collections.sort()多10倍以上的原因是什么?
为db4o优化我的模型的最佳方法是什么? (激活的不是在这种情况下有用,因为ResultingList将在ListAdapter,这就需要每一个成员通过。)
编辑:由于下面的答案,我在这里插入我的SodaQuery,太:
public List<DatabaseReport> getCurrentDeviationReports(){
final Date now = new Date(System.currentTimeMillis());
Query query = getDatabase().query();
query.constrain(DatabaseReport.class);
query.descend("mReport").descend("begin").descend("datetime").constrain(now).smaller();
query.descend("mReport").descend("end").descend("datetime").constrain(now).greater();
query.descend("mReport").descend("begin").descend("datetime").orderAscending();
query.descend("mReport").descend("end").descend("datetime").orderDescending();
return query.execute();
}
所以这里的“datetime”是一个java.util.date对象。正如我上面写的,在我看来,索引使它变得更加松弛!
也许您应该在相关字段中添加索引? –