mysql - 使用 JDBC executeBatch() 通过 appscript 批量插入 Cloud SQL 消耗太多时间

标签 mysql performance jdbc google-apps-script google-cloud-sql

我收集了一些原始数据并将其存储在谷歌电子表格中,还有一个现有的谷歌云 SQL 实例。我正在尝试使用 appscript 从 gsheet 中提取数据,然后推送到 gcloud SQL。

不幸的是,我发现完成“批量插入”花费了太多时间。这是我的方法和结果(在这个例子中,我没有展示从 gsheet 中提取数据的方法,因为它很快而且无关紧要):

应用脚本:

   var connection = [My Connection];
   connection.setAutoCommit(false);
   var stmt = connection.prepareStatement('INSERT INTO [testTable]'
      + '(emp_no,title,from_date,to_date) values (?, ?, ?, ?)');
   for (var i = 1; i <= 50; i++) { //tuples counter i
    stmt.setString(1, 1);
    stmt.setString(2, "Worker" + i);
    stmt.setString(3, "2018-03-11");
    stmt.setString(4, "2019-05-04");
    stmt.addBatch();
  }
  stmt.executeBatch();
  connection.commit();

简单的代码,这是我的结果(来自“执行记录”):

当元组计数器 i 小于 50 时:

[19-08-12 13:57:46:470 NZST] JdbcPreparedStatement.executeBatch() [9.978 seconds]

当元组计数器 i 小于 500 时:

[19-08-12 14:10:23:575 NZST] JdbcPreparedStatement.executeBatch() [96.578 seconds]

我想做的是拉和推 5000 个元组。在这种情况下如何减少执行时间?

最佳答案

Google Apps Script 的 JDBC 连接器是出了名的慢。

您可能不得不完全放弃使用它并改用其他东西。

如果您熟悉 Node.js,那么您可能需要考虑使用 Cloud Function作为向您的工作表和 CloudSQL 数据库推送和拉取数据的中介服务。

关于mysql - 使用 JDBC executeBatch() 通过 appscript 批量插入 Cloud SQL 消耗太多时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57455224/

相关文章:

php - 如何通过 Unix 套接字将 PhpMyAdmin 连接到本地主机?

C# linq order by 和其他带有 foreach 的语句,是否存在性能差异?

java - 无法写入 MySQL 时重置连接

mysql - 如何在不重复子查询的情况下选择所有这些数据?

mysql - 无法理解如何在基本 MYSQL 解释示例中摆脱表扫描

performance - Scala 惰性值 : performance penalty? 线程安全?

php - 如何使用 smarty - seo 速度优化将所有 css 链接转换为内联样式

java - 使用集合对象构建结果集

java - Web界面如何从服务器获取数据?

mysql - SQL-如何在聚合操作期间获取每组重复次数最多的文本值?