Я новичок в R, но я заинтересован в использовании Shiny для создания динамических диаграмм с использованием данных, хранящихся в базе данных SQL Server. Чтобы включить интерактивность, я хочу собрать необработанные данные из базы данных и выполнить вычисления в R
вместо того, чтобы база данных суммировала данные.
Я могу подключиться к базе данных с помощью RODBC
, выполнить запрос и получить результаты в data.frame
. Однако время чтения в R
примерно на 12 раз больше, чем тот же запрос, выполненный в SQL Server Management Studio (SSMS). SSMS занимает ~ 600 мс, тогда как R
занимает около 7,6 секунды. Мой вопрос заключается в том, что я делаю что-то неправильно или R
просто медленнее с доступом к базе данных? И если да, есть ли более быстрые альтернативы (например, запись вывода базы данных в файл и чтение файла)?
Некоторая информация о запросе, который может помочь: запрос извлекает около 250K строк с 4 столбцами. Первый столбец - это дата, а остальные три - числовые значения. Машина под управлением R
и SSMS - это высокопроизводительная рабочая станция Win 7 с 32 ГБ памяти. Команда R
, которую я запускаю:
system.time(df <- sqlQuery(cn, query))
который возвращает:
user system elapsed
7.17 0.01 7.58
Интересно, что передача данных с SQL на мою машину выполняется быстро, но R
занят внутренними делами в течение нескольких секунд, прежде чем вернуть data.frame
. Я вижу это, потому что загрузка сети увеличивается в первую секунду и почти сразу возвращается к нулю. Затем несколько секунд спустя возвращается R
data.frame
.