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 символов. Я также добавил приблизительное количество строк каждого фрейма данных в исходное сообщение. Спасибо!