Использование RMySQL
Я пытаюсь вставить большое количество строк в AWS MySQL InnoDB. Я экспериментирую с docker образом R-Studio на Debian GNU / Linux 9 (растяжение) и R на Windows 10 ОС (без ВМ). Образ R-Studio Debian Docker основан на rocker/verse:3.6.1
.
При использовании R на Windows 10 запись 1000000 строк не представляет проблемы. Тем не менее, пробуя то же самое в R-Studio на Debian GNU, я не могу написать 5000 строк (ошибка: «не удалось выполнить оператор: Потеряно соединение с MySQL сервером во время запроса»). Однако для 1000 и 2000 строк время выполнения кажется одинаковым.
В обоих случаях я использую R версии 3.6.1 и RMySQL
версии 0.10.17.
Сценарий R включен Debian GNU и R-Studio (экземпляр Docker image) при попытке выполнить 5000 строк выдает ошибку: «не удалось выполнить инструкцию: потеря соединения с MySQL сервером во время запроса».
> library(data.table)
data.table 1.12.6 using 1 threads (see ?getDTthreads). Latest news: r-datatable.com
> setDTthreads(threads=2)
> library(RMySQL)
Loading required package: DBI
>
> # Test data with 1,000,000 rows
> tbl <- data.table(tick=rep("Dummy1",1000000),tick2=rep("Dummy2",1000000),cor=rnorm(1000000))
>
> # Connect to AWS RDS
> mydb <- dbConnect(MySQL(), user='user', password='password', dbname='dbname', host='myhost')
>
> # 1,000 rows
> dbWriteTable(mydb, name='cloudscript_test', value=tbl[1:1000,], row.names=F, append=T)
[1] TRUE
> Sys.time() - start_time
Time difference of 0.2941678 secs
>
> # 2,000 rows
> start_time <- Sys.time()
> dbWriteTable(mydb, name='cloudscript_test', value=tbl[1:2000,], row.names=F, append=T)
[1] TRUE
> Sys.time() - start_time
Time difference of 0.3221502 secs
>
> # 5,000 rows
> start_time <- Sys.time()
> dbWriteTable(mydb, name='cloudscript_test', value=tbl[1:5000,], row.names=F, append=T)
Error in .local(conn, statement, ...) :
could not run statement: Lost connection to MySQL server during query
> Sys.time() - start_time
Time difference of 1.095466 mins
> dbDisconnect(mydb)
[1] TRUE
Сценарий R включен Windows 10 (1 000 000 строк работает без проблем):
> library(data.table)
data.table 1.12.6 using 2 threads (see ?getDTthreads). Latest news: r-datatable.com
> library(RMySQL)
Loading required package: DBI
>
> # Test data with 1,000,000 rows
> tbl <- data.table(tick=rep("Dummy1",1000000),tick2=rep("Dummy2",1000000),cor=rnorm(1000000))
>
> # Connect to AWS RDS
> mydb <- dbConnect(MySQL(), user='user', password='password', dbname='dbname', host='myhost')
>
> ## Insert 'tbl' into MySQL InnoDB
> # 1,000 rows
> start_time <- Sys.time()
> dbWriteTable(mydb, name='cloudscript_test', value=tbl[1:1000,], row.names=F, append=T)
[1] TRUE
> Sys.time() - start_time
Time difference of 0.3517108 secs
>
> # 2,000 rows
> start_time <- Sys.time()
> dbWriteTable(mydb, name='cloudscript_test', value=tbl[1:2000,], row.names=F, append=T)
[1] TRUE
> Sys.time() - start_time
Time difference of 0.29813 secs
>
> # 5,000 rows
> start_time <- Sys.time()
> dbWriteTable(mydb, name='cloudscript_test', value=tbl[1:5000,], row.names=F, append=T)
[1] TRUE
> Sys.time() - start_time
Time difference of 0.3778641 secs
>
> # 1,000,000 rows
> start_time <- Sys.time()
> dbWriteTable(mydb, name='cloudscript_test', value=tbl, row.names=F, append=T)
[1] TRUE
> Sys.time() - start_time
Time difference of 37.09445 secs
>
> dbDisconnect(mydb)
[1] TRUE
Есть идеи по улучшению производительности R Debian / Linux?
Некоторая дополнительная информация:
R Windows 10:
> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18362)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RMySQL_0.10.17 DBI_1.0.0 data.table_1.12.6
loaded via a namespace (and not attached):
[1] compiler_3.6.1 startup_0.14.0
R-Studio Linux:
> sessionInfo()
R version 3.6.1 (2019-07-05)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 9 (stretch)
Matrix products: default
BLAS/LAPACK: /usr/lib/libopenblasp-r0.2.19.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
[3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
[5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=C
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C
[9] LC_ADDRESS=C LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] stats graphics grDevices utils datasets
[6] methods base
other attached packages:
[1] RMySQL_0.10.17 DBI_1.0.0 data.table_1.12.6
loaded via a namespace (and not attached):
[1] compiler_3.6.1 tools_3.6.1
Оба подключаются к MySQL серверу 5.6.39-log через TCP / IP.
Любая помощь высоко ценится.