我正在开发一个加载巨大的CSV文件(超过100万行)并保存到数据库的系统。每条线都有一千多个场地。一个CSV文件被认为是一个批次,每一行都被视为其子对象。在添加对象期间,每个对象都将保存在单个批次列表中,并且在某些时候,由于List将添加超过100万个对象,因此内存不足。我不能将文件拆分为N个数字,因为在非串行顺序之间存在依赖关系(任何行都可以依赖于其他行)。巨大的CSV文件的Java内存问题
以下是一般的逻辑:
Batch batch = new Batch();
while (csvLine !=null){
{
String[] values = csvLine.split(",", -1);
Transaction txn = new Transaction();
txn.setType(values[0]);
txn.setAmount(values[1]);
/*
There are more than one thousand transaction fields in one line
*/
batch.addTransaction (txn);
}
batch.save();
有什么办法可以处理这种类型的具有低内存的服务器状态?
你是直接将每行上传到数据库还是真的保存1 mio行,然后将它全部添加到数据库? – Blobonat
@Blobonat我在批量中添加了1百万条记录,然后一次将它们全部添加到数据库中。 –
*所有行*是相互依赖的,还是存在组?如果是后者,是否可以通过记忆每行信息的一部分来解决群体问题? –