Java中使用mongoTemplate批量插入
mongoTemplate批量插入
·
业务背景:前端上传zip压缩包文件,后端接受到请求后解压zip得到源文件,数据库记录源文件信息,数据库使用的是mongodb,业务要求同一个文件(这里我们根据文件名称作为判断条件)只有一条记录。
实现方案:
方案一:使用MongoRepository中的saveAll()方法;为减少对数据库的访问,这里都使用的是批量操作,首先根据文件名称批量查询,对结果集中的文件名称和参数文件名集合进行比较,取差集,对结果集中没有的进行批量插入,总结一下就是先查询去重再执行插入。
方案二:在文件名称字段上创建唯一索引,让数据库本身保证数据唯一性;使用唯一所以代码层面使用mongoTemplate.bulkOps,具体如下:
public void saveBatch(List<FileEntity> list) {
mongoTemplate.bulkOps(BulkOperations.BulkMode.UNORDERED, FileEntity.class).insert(list).execute();
}
参数说明:
BulkMode.UNORDERED:表示并行处理,遇到错误时能继续执行不影响其他操作;
BulkMode.ORDERED:表示顺序执行,遇到错误时会停止所有执行
这里推荐使用第二种方案,效率高,实测每批500条数据插入耗时150毫秒左右
更多推荐
已为社区贡献1条内容
所有评论(0)