【问题标题】:How to add 10000 rows of data to mysql database如何向mysql数据库添加10000行数据
【发布时间】: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 崩溃并停止了。

标签: java mysql insert hashmap


【解决方案1】:

如果您需要向任何 rdbms 添加数千条记录,您应该使用 rdbms 提供的功能来导入数据。

在 MySQL 中,用于导入大量数据的功能称为load data infile

在目标表中为需要唯一的字段创建唯一索引或主键。在load data infile 语句中指定ignore 子句,以便在遇到重复条目时导入不会停止:

load data infile 'filename' ignore into table yourtable ...

更新

如果需要识别重复记录,那么

  1. 创建一个与目标表结构相同的临时表。
  2. 使用load data infile语句将所有数据导入到临时表中。
  3. 在临时表和目标表之间使用简单的selectinner join 将为您提供目标表中已存在的记录。
  4. 使用insert ... select ... from temp_table left join target table on ... where target_table.identifier_column is null 命令只将临时表中那些不存在于taget 表中的记录插入到目标表中。在 where 条件下,如果 3 列的组合唯一标识记录,则您可能必须指定多于 1 列。
  5. 删除临时表。 (或者只是关闭数据库连接)

【讨论】:

  • 是的,但是要求需要指出哪一行是重复的。如果我使用此代码忽略重复数据,我怎样才能达到要求?
  • 下次请分享问题中的任何要求,而不仅仅是后续的 cmets。我会更新答案。
  • Yes.thanks 但是我如何将它应用到 springmvc+spring+mybaits?
  • 所以我应该编写函数将excel文件更改为csv?
  • 不幸的是,load data infile 无法从 excel 文件中加载数据,所以如果这是您的数据所在,那么您应该将其转换为 csv。
猜你喜欢
  • 1970-01-01
  • 2013-10-12
  • 2013-04-14
  • 1970-01-01
  • 2023-01-17
  • 1970-01-01
  • 1970-01-01
  • 2011-11-06
  • 2021-02-01
相关资源
最近更新 更多