【发布时间】:2021-02-05 06:01:05
【问题描述】:
我正在使用一个 rest-api,它应该从 csv 文件中导入数据。上传和映射到对象部分正在工作,但不是 saveAll(),将 130000~ 行保存到数据库(在 mssqlserver 上运行)只需要数年时间,它应该可以在更短的时间内处理更大的文件。
这是我的数据类的样子:
@Entity
data class Street(
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "streetSeq")
@SequenceGenerator(name = "streetSeq", sequenceName = "streetSeq", allocationSize = 1)
val id: Int,
val name: String?,
val municipalityId: Int?
)
我只是使用 saveAll 方法。导入方法中的所有内容都相对快速(例如 10 秒),直到 saveAll()
override fun import(file: MultipartFile) {
val inputStream = file.inputStream
var import: List<Street> = listOf()
tsvReader.open(inputStream) {
val csvContents = readAllWithHeaderAsSequence()
val dataClasses = grass<ImportStreet>().harvest(csvContents)
dataClasses.forEach { row ->
import = import + toStreet(row)
}
println("Data Converted")
}
streetRepository.saveAll(import)
inputStream.close()
}
我已经尝试过调整 application.yml,但差别不大。
jpa:
properties:
hibernate:
ddl-auto: update
dialect: org.hibernate.dialect.SQLServer2012Dialect
generate_statistics: true
order_inserts: true
order_updates: true
jdbc:
batch_size: 1000
【问题讨论】:
-
第一次尝试,在实体上添加
@Batch。如果它不起作用,请查看Spring-Batch。
标签: sql-server hibernate kotlin jdbc