我正在解析一个JSON文件,用OrmLite在数据库中生成行和关系。使用以下代码,解析所有内容大约需要20多分钟。有什么方法可以优化它以减少时间吗?
我有3张桌子构成了多对多的关系。
public class FirstTable {
int id;
ForeignCollection<IntermediateTable> intermediateTables;
}
public class IntermediateTable {
int id;
FirstTable firstTable;
SecondTable secondTable;
}
public class SecondTable {
int id;
ForeignCollection<IntermediateTable> intermediateTables;
}
在创建并填充第一个和第二个表之后,我正在解析一个JSON文件以创建FirstTable和SecondTable之间的关系。 JSON文件存储FirstTable对象的集合以及相关SecondTable条目的ID。
我的代码看起来像这样:
setForeignRelations(JSONObject jsonObject, FirstTable firstTable) {
JSONArray secondTables = jsonObject.getJSONArray(SECOND_TABLE_KEY);
for (int i = 0; i < secondTables.length(); i++) {
int secondTableId = ((Integer)secondTables.get(i)).intValue();
SecondTable secondTable = DbManager.getInstance().getHelper().getSecondTableDao().queryForId(secondTableId);
IntermediateTable intermediateTable = new IntermediateTable();
intermediateTable.setFirstTable(firstTable);
intermediateTable.setSecondTable(secondTable);
DbManager.getInstance().getHelper().getIntermediateTableDao().create(intermediateTable);
}
}
答案 0 :(得分:0)
我从不尝试过,但这可能会更快,应该可行:
setForeignRelations(JSONObject jsonObject, FirstTable firstTable) {
JSONArray secondTables = jsonObject.getJSONArray(SECOND_TABLE_KEY);
for (int i = 0; i < secondTables.length(); i++) {
int secondTableId = ((Integer)secondTables.get(i)).intValue();
IntermediateTable intermediateTable = new IntermediateTable();
intermediateTable.setFirstTable(firstTable);
intermediateTable.setSecondTable(new SecondTable(secondTableId));
DbManager.getInstance().getHelper().getIntermediateTableDao().create(intermediateTable);
}
}
这应该有效,因为它只会在secondTable中保存secondTable的id。因此,您不必请求数据库填充第二个表的所有字段。
如果你想让它再次变快,你可以看看这里加速你的对象插入: ORMLite's createOrUpdate seems slow - what is normal speed?
因此,您将使用允许在ORMLite中提高速度的callBatchTasks
方法。
通过这两件事,你可以提高SELECT的速度(因为你不再这样做了)和使用callBatchTasks
方法的INSERT。
如果您想要callBatchTasks
方法的示例。你可以看看这里:
Android ORMLite slow create object