目前我正在嘗試將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對象。正如我上面寫的,在我看來,索引使它變得更加鬆弛!
也許您應該在相關字段中添加索引? –