RData загружается дольше, чем снова запрашивает базу данных

Я использую RStudio Server на сервере ОЗУ 256 ГБ, а MS-SQL-Server 2012 - на другом. Эта БД содержит данные, которые позволяют мне построить график с ~100 миллионами узлов и ~150 миллионами ребер.

Я рассчитал, сколько времени потребуется для построения этого графика из этих данных:

  • 1-й запрос SELECT = ~ 22M строк = 12 минут = df1 (dataframe1)
  • 2-й запрос SELECT = ˜30M строк = 8 минут = df2
  • 3-й запрос SELECT = ~ 32M строк = 8 минут = df3
  • 4-й запрос SELECT = ~ 63M строк = 70 минут = df4
  • edges = rbind(df1, df2, df3, df4) = 6 минут
  • mygraph = graph.data.frame(edges) = 30 минут

Итак, чуть более двух часов. Поскольку мои данные достаточно стабильны, я решил, что могу ускорить процесс, сохранив mygraph на диск. Но когда я попытался загрузить это, это просто не будет. Я сдался после 4 часов ожидания, думая, что что-то пошло не так.

Поэтому я перезагружаю сервер, удаляю папку.rstudio и начинаю заново, на этот раз сохраняя кадры данных из каждого запроса SQL плюс edges фрейм данных в форматах RData и RDS (save() а также saveRDS(), compress = FALSE каждый раз). После каждого сохранения я рассчитывал load() а также readRDS() времена пяти данных. Времена, где почти то же самое для load() а также readRDS():

  • df1 = 1,1 ГБ, файл = 1 минута
  • df2 = 1,4 ГБ, файл = 2 минуты
  • df3 = 1,7 ГБ, файл = 6 минут
  • df4 = 3,1 ГБ, файл = 13 минут
  • ребра = файл 6,8 ГБ = 21 минута

Достаточно хорошо, подумал я. Но сегодня, когда я начал новую сессию и попытался load(df1) чтобы внести в него некоторые изменения, я снова почувствовал, что что-то не так. После 20 минут ожидания его загрузки я сдался. Память, диск и процессор не должны быть проблемами, так как я единственный, кто использует этот сервер. Я уже перезагрузил сервер и удалил папку.rstudio, думая, что, может быть, что-то там зависало в моем сеансе, но информационный фрейм по-прежнему не загружается. В то время как load() предположительно работает, iotop не показывает активность диска, и это то, что я получаю от ps

ps -C rsession -o %cpu,%mem,cmd %CPU %MEM CMD 99.5 0.3 /usr/lib/rstudio-server/bin/rsession -u myusername

Я понятия не имею, что попробовать дальше. Для меня нет смысла, что загрузка файла RData займет больше времени, чем запрос к базе данных SQL, которая находится на другом сервере. И даже если это так, то почему это было так быстро, когда я рассчитывал load() а также readRDS() раз после сохранения данных?

Это первый раз, когда я спрашиваю что-то здесь, в Stackru, так что извините, если я забыл упомянуть что-то важное, чтобы вы могли ответить на этот вопрос. Если я сделал, пожалуйста, дайте мне знать.


РЕДАКТИРОВАТЬ: некоторая дополнительная информация, запрошенная Брэндоном в комментариях. ОС - CentOS 7. Фреймы данных содержат списки ребер в первых двух столбцах (col1=node1; col2=node2) и два дополнительных столбца для атрибутов ребер. Все столбцы являются строками длиной от 5 до 14 символов. Я также добавил приблизительное количество строк каждого фрейма данных в исходное сообщение. Спасибо!

0 ответов

Другие вопросы по тегам