【问题标题】:Fastest way to import data from one database to other in mysql using Java使用Java在mysql中将数据从一个数据库导入另一个数据库的最快方法
【发布时间】:2014-12-10 20:09:52
【问题描述】:

数据库管理系统 - mysql

语言 - Java

我有两个数据库

数据库一 - 我只有 SELECT 访问权限。

数据库二 - 完全访问。

具体要求:-

我必须将许多表从数据库一导入到数据库二。

当前解决方案:-

  1. 我正在从表中选择所有行并将结果存储在 ResultSet 中。

    String sql = "SELECT * FROM " + tableName +" ;";
    Result Set res = runSql(sql);
    
  2. 将 ResultSet 中的每一行写入 CSV 文件。

    OutputStreamWriter writer = null;
    writer = new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8");
    
    while (res.next() ){
                for (int j = 1; j <= noOfColumns.size(); j++) {
                    if(j != 1)
                        writer.append(",");
                    writer.append("\""+res.getString(j)+"\"");
                }
    
                writer.append("\n");
            }
    
  3. 使用 LOAD DATA INFILE 从 CSV 文件填充数据库 2。

    String sql = "LOAD DATA LOCAL INFILE '"+fileName+"' INTO TABLE "+tableName+ " CHARACTER SET UTF8 "+"     COLUMNS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY \"\n\";";
    return runSql(sql);
    
  4. 对所有表重复此过程。

我的问题:-

由于某些表的行数超过数百万,我可以做得更好吗? 我发现大部分时间都用于第 2 步(将 ResultSet 写入 CSV)。

【问题讨论】:

  • 数据库在同一台服务器上是偶然的吗?
  • 不,数据库位于不同的服务器上。而且我对数据库一知之甚少。我对数据库 One 没有任何控制权。
  • 你不能导出导入功能。不是从 DB1 读取然后写入文件,而是直接将数据从 DB1 导出到文件中,然后在 DB2 中导入数据。这将节省文件写入和对结果集的迭代。
  • @NachiketKate 你能解释一下你的观点吗?我只是一个初学者。而且我也无法在 DB1 服务器中写入任何文件。
  • 每个数据库都可以将大型表/数据导出到称为导出操作的文件中。文件格式可用作 csv、自定义分隔符等,也可用于导入相同的导出数据。此功能由 DB 提供,因此它通常比手动查询获取更快地工作 - 遍历结果集 - 写入文件 - 然后插入到 DB。我希望你现在明白了。

标签: java mysql performance import export-to-csv


【解决方案1】:

直接的问题是您应该使用BufferedWriter,,但更重要的是,您应该使用SELECT ... INTO OUTFILE 在服务器上创建文件,而不是通过迭代ResultSet 或从客户端加载文件。

事实上为什么是Java?最快的方法是根本不用Java,用MySQL Workbench、HeidiSQL等,只需要导入一个SQL转储即可。

【讨论】:

  • 但是你不认为我需要数据库一服务器(我没有)的 FILE link 权限来获取 OUTFILE 吗? link
  • @shiva 当然,但解决权限问题的方法不是编写大量低效且麻烦的代码。就是以具有所需权限的用户身份执行所需的命令。
猜你喜欢
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-29
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多