Основная разница в производительности для R MySQL :: dbWriteTable между R / Windows 10 и R-Studio / Debian GNU Linux 9 - PullRequest
1 голос
/ 21 февраля 2020

Использование 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.

Любая помощь высоко ценится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...