2

我在 256GB RAM 服务器上运行 RStudio Server,在另一个服务器上运行 MS-SQL-Server 2012。该数据库包含允许我构建具有约 1 亿个节点和约 1.5 亿条边的图的数据。

我已经计算了从这些数据构建这个图表需要多长时间:

  • 第一次 SELECT 查询 = ~22M 行 = 12 分钟 = df1 (dataframe1)
  • 第二次 SELECT 查询 = ~30M 行 = 8 分钟 = df2
  • 第三次 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 文件夹并重新开始,这一次以edgesRData 和 RDS 格式(save()以及saveRDS()compress = FALSE每次)保存来自每个 SQL 查询的数据帧和数据帧。每次保存后,我都会load()readRDS()五个数据帧进行计时。load()和几乎相同的时间readRDS()

  • df1 = 1.1 GB 文件 = 1 分钟
  • df2 = 1.4 GB 文件 = 2 分钟
  • df3 = 1.7 GB 文件 = 6 分钟
  • df4 = 3.1 GB 文件 = 13 分钟
  • 边缘 = 6.8 GB 文件 = 21 分钟

够好了,我想。但是今天当我开始一个新的会话并尝试对其load(df1)进行一些更改时,我再次感到有些不对劲。在等待它加载 20 分钟后,我放弃了。内存、磁盘和 CPU 不应该是问题,因为我是唯一使用此服务器的人。我已经重新启动服务器并删除了我的 .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()时间时速度如此之快?

这是我第一次在 StackOverflow 上问一些问题,如果我忘记提及一些对您能够回答这个问题很重要的事情,非常抱歉。如果我这样做了,请告诉我。


编辑:布兰登在评论中要求的一些附加信息。操作系统是 CentOS 7。数据帧在前两列(col1=node1;col2=node2)中包含边列表,另外两列用于边属性。所有列都是字符串,长度在 5 到 14 个字符之间。我还在我的原始帖子中添加了每个数据帧的大致行数。谢谢!

4

0 回答 0