Java Android在房间数据库中插入大量数据
我有大约10个模型,每个模型都有超过120K行和90列的记录,其中包含双数组值。在室内插入任何一个模型都需要125-130秒以上的时间。有谁能建议我需要做些什么,以节省所有这些120K与一些批量插入技术,大约需要1或2秒。获取任何范围的记录都是平滑的,并且返回的子列表在可承受的时间内(不到一秒钟)。下面是我目前正在使用的DAO和存储库方法 刀看起来像这样Java Android在房间数据库中插入大量数据,java,android,performance,android-studio,android-room,Java,Android,Performance,Android Studio,Android Room,我有大约10个模型,每个模型都有超过120K行和90列的记录,其中包含双数组值。在室内插入任何一个模型都需要125-130秒以上的时间。有谁能建议我需要做些什么,以节省所有这些120K与一些批量插入技术,大约需要1或2秒。获取任何范围的记录都是平滑的,并且返回的子列表在可承受的时间内(不到一秒钟)。下面是我目前正在使用的DAO和存储库方法 刀看起来像这样 @Transaction @Insert(onConflict = OnConflictStrategy.IGNORE) // IGNORE/
@Transaction
@Insert(onConflict = OnConflictStrategy.IGNORE) // IGNORE/REPLACE has no effect (just to clear out things)
void insertAllDynStabRecord(List<DynStab> dynStabList);
存储库方法第二种方法
private static class WriteDynStabRecords extends AsyncTask<List<DynStab>, Void, Void> {
private PDDao pdDao;
private WriteDynStabRecords(PDDao pdDao) {
this.pdDao = pdDao;
}
@Override
protected Void doInBackground(List<DynStab>... dynStabList) {
pdDao.insertAllDynStabRecords(dynStabList[ 0 ]);
return null;
}
}
私有静态类WriteDynStabRecords扩展异步任务{
私有PDDao PDDao;
私有WriteDynStabRecords(PDDao PDDao){
this.pdDao=pdDao;
}
@凌驾
受保护的Void doInBackground(列表…动态列表){
pdDao.insertAllDynStabRecords(dynStabList[0]);
返回null;
}
}
这两种方法都需要120秒以上的时间来写入大约120K条记录。我做错了什么,或者在ROOM数据库中插入批量数据的最佳和最快的方法是什么。不知道这篇文章发表后发生了多少变化,但可能是Android ROOM与原始sqlite批量插入语句相比仍然非常慢。你找到解决方案了吗?我甚至面临着同样的问题。@kavitha,我使用inserAll方法插入列表而不是单个记录。
private static class WriteDynStabRecords extends AsyncTask<List<DynStab>, Void, Void> {
private PDDao pdDao;
private WriteDynStabRecords(PDDao pdDao) {
this.pdDao = pdDao;
}
@Override
protected Void doInBackground(List<DynStab>... dynStabList) {
pdDao.insertAllDynStabRecords(dynStabList[ 0 ]);
return null;
}
}