256GB RAM サーバーで RStudio Server を実行し、別のサーバーで MS-SQL-Server 2012 を実行しています。この DB には、最大 1 億のノードと最大 1 億 5000 万のエッジを持つグラフを作成できるデータが含まれています。
そのデータからこのグラフを作成するのにかかる時間を計りました。
- 最初の 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 分
それで2時間ちょっと。私のデータは非常に安定しているので、mygraph
ディスクに保存することで処理を高速化できると考えました。しかし、ロードしようとすると、ロードされませんでした。何かがおかしいと思って、4時間待った後、あきらめました。
そのため、サーバーを再起動し、.rstudio フォルダーを削除して最初からやり直します。今回は、各 SQL クエリのデータフレームとデータフレームを、edges
RData と RDS の両方の形式 (毎回)save()
で保存します。保存するたびに、5 つのデータフレームの時間を計りました。とがほぼ同じ時間:saveRDS()
compress = FALSE
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 で質問するのは初めてなので、この質問に答えるために重要なことを言い忘れていたら申し訳ありません。もしそうなら、私に知らせてください。
編集:コメントでブランドンが要求した追加情報。OS は CentOS 7 です。データフレームには、最初の 2 列 (col1=node1; col2=node2) にエッジのリストと、エッジ属性用の追加の 2 つの列が含まれています。すべての列は文字列で、長さは 5 ~ 14 文字です。また、各データフレームのおおよその行数を元の投稿に追加しました。ありがとう!