使用 JDBC executeBatch() 通过 appscript 批量插入云 SQL 消耗太多时间
Bulk insert to Cloud SQL by appscript using JDBC executeBatch() consuming too much time
我收集了一些原始数据并将其存储在 google 电子表格中,并且还有一个现有的 Google 云 SQL 实例。我正在尝试使用 appscript 从 gsheet 中提取数据然后推送到 gcloud SQL.
不幸的是,我发现完成 "bulk insert" 花费了太多时间。这是我的方法和结果(在这个例子中,我没有展示从 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();
简单的代码,这是我的结果(来自 "Execution Transripts"):
当元组计数器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 数据库,以及从中提取数据。
我收集了一些原始数据并将其存储在 google 电子表格中,并且还有一个现有的 Google 云 SQL 实例。我正在尝试使用 appscript 从 gsheet 中提取数据然后推送到 gcloud SQL.
不幸的是,我发现完成 "bulk insert" 花费了太多时间。这是我的方法和结果(在这个例子中,我没有展示从 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();
简单的代码,这是我的结果(来自 "Execution Transripts"):
当元组计数器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 数据库,以及从中提取数据。