如何在Java中处理大量数据

如何在Java中处理大量数据,java,performance,Java,Performance,我有一个要求,我需要检查数据库中可用或不在Java批处理中的值的每一行 在我的要求中 我有一个文件,其中包含200行数据,目前也许这个文件可能会增长或收缩以后每n天 这里的要求是,我需要通过检查文件中的数据来插入和更新引用表 示例文件 我有一个包含2000行数据的参考表独立表 例如Emp表 目前,有一个程序是用Java编写的,其中数据从参考表中提取,并添加到一个映射中,其中Emp编号作为键,Emp详细信息作为值映射 添加数据后,使用键检查文件中的数据是否可用。如果可用,则更新数据或向地图添加新值

我有一个要求,我需要检查数据库中可用或不在Java批处理中的值的每一行

在我的要求中

我有一个文件,其中包含200行数据,目前也许这个文件可能会增长或收缩以后每n天

这里的要求是,我需要通过检查文件中的数据来插入和更新引用表

示例文件

我有一个包含2000行数据的参考表独立表

例如Emp表

目前,有一个程序是用Java编写的,其中数据从参考表中提取,并添加到一个映射中,其中Emp编号作为键,Emp详细信息作为值映射

添加数据后,使用键检查文件中的数据是否可用。如果可用,则更新数据或向地图添加新值

最后完成批量插入

我的问题是,这种方法是否好

因为我不想每次都用表检查数据,因为我希望这是一个代价高昂的操作,因为连接必须打开很长时间

但是还有一件昂贵的事情,到目前为止,我们在表中有2000行数据,这可能会增加很大一部分,甚至10000行,这并不奇怪。现在,这个问题在地图上保存了大量数据,处理它将是另一个繁忙的问题

因为两者在后期都会遇到性能问题

操作此类需求的最佳方法是什么,是否有任何算法


提前谢谢,有人能给我一个正确的方向吗。

加载200行,并向数据库发送一个查询,以便在支持数据的情况下将数据插入。将2000条记录加载到内存似乎比在数据库中点击200次更糟糕。你可以考虑将文件分解成块,所以你先取前20个记录,做一个DB检索,循环通过20来进行更新/插入/然后在批处理更新中推回到20。继续你的下一个20岁左右。这也有助于减轻失败,如果在中间某个点失败,则在批处理中至少部分成功。这些数字对于处理时间来说非常低。这里有一篇文章描述了如何在TSQL中实现这一点,它实质上是将代码放在存储过程中,并在Java批处理中调用存储过程。让数据库完成它的工作。。。最困难的部分是从错误中恢复。有些数据库支持upsert,所以您需要研究哪种SQL更适合您的服务器。我通常批量加载1000-5000条记录/批之间的数据。
+++++++++++++++++++++++++++++++++++++++++

Emp No  Emp Name

1        Name-1   
2        Name-2
3        Name-3
4        Name-4
5        Name-5
6        Name-6
7        Name-7
8        Name-8
,,..... it goes on
+++++++++++++++++++++++++++++++++++++++++++++++++++++
******************************************************
Emp No Emp Name
1      Name-1
2      Name-2
3      Name-3
4      Name-4
5      Name-5
6      Name-6
7      Name-7
8      Name-8
,,..... it goes on
******************************************************