【发布时间】:2016-08-23 08:39:19
【问题描述】:
在添加到数据库之前,应该检查数据。三列项目应该是唯一的。所以我创建了一个HashMapper(HashMap Map)来恢复数据库中已经存在的数据。
HashMap<String, Object> eauMap = new HashMap<String, Object>();
所以有一个从数据库中选择的操作,我用三个不同的键来映射同一个对象。
List<Object> existObjectList = Service.getAll();
HashMap<String, Object> Map = new HashMap<String, Object>();
for (Object existdata : existEauList) {
Map.put(existdata.getip1(), existdata);
Map.put(existdata.getip2(), existdata);
Map.put(existdata.getip3(), existdata);
}
然后我做一个循环检查函数Map.get(key1),Map.get(key2),Map.get(key3)添加数据的每一行。如果有null,我把数据放入列表,我也将其放入地图中。
for loop:
Object data = (Object) Map.get(ip1);//ip1 is from the cell value
if (data == null) {
data=(Object)Map.get(ip2);
if(data==null){
data=(Object)Map.get(ip3);
if(data==null){
…………………………
Map.put(ip1,newdata);
Map.put(ip2,newdata);
Map.put(ip3,newdata);
}
}
}
然后我将列表提交到数据库。 它在只有 300 行数据时有效。现在我加10000,服务器崩溃。我该怎么做才能提高效率。 需求需要指出哪一行是重复的,项目是springmvc+spring+mybaits搭建的
【问题讨论】:
-
您是否使用prepared statement和addBatch来添加这些记录?通常批处理执行会给您比单个插入更好的性能。哪台服务器给您带来了问题? MySQL 或您正在运行的任何 java 进程?当服务器发生故障时,您是否有任何错误或堆栈跟踪?它会内存不足吗?
-
我使用 mybaits 和 addBatch 添加这些记录。我将我的项目部署到本地 tomcat。但是当我导入数据时,我等待了 50 秒,然后我的 Eclipse 崩溃并停止了。