假设我在 32 GB 的服务器上有一个 4 GB 的数据集。
我可以将所有这些读入 R,创建一个 data.table 全局变量,并让我的所有函数都使用该全局变量作为一种内存数据库。但是,当我退出 R 并重新启动时,我必须再次从磁盘读取它。即使使用智能磁盘缓存策略(保存/加载或 R.cache),我也有 10 秒左右的延迟来获取数据。复制该数据大约需要 4 秒。
有没有一种好方法可以在 R 会话退出后将其缓存在内存中?
想到了几件事,RServe、redis/Rredis、Memcache、多核...... Shiny-Server 和 Rstudio-Server 似乎也有解决这个问题的方法。
但话又说回来,在我看来,也许 data.table 可以提供此功能,因为它似乎无论如何都会将数据移动到 R 的内存块之外。这将是理想的,因为它不需要任何数据复制、重组等。
更新:
我进行了一些更详细的测试,我同意下面的评论,我可能没有太多可抱怨的。
但这里有一些其他人可能会觉得有用的数字。我有一个 32GB 的服务器。我创建了一个 4GB 大小的 data.table。根据 gc() 并查看顶部,它似乎使用了大约 15GB 的峰值内存,其中包括制作一份数据副本。我觉得这很好。
我用 save() 写入磁盘,删除了对象并使用 load() 重新制作它。这分别花费了 17 秒和 10 秒。
我对 R.cache 包做了同样的事情,这实际上更慢。23 和 14 秒。
然而,这两个重新加载时间都非常快。load() 方法给了我 357 MB/s 的传输速率。相比之下,复制需要 4.6 秒。这是一个虚拟服务器。不确定它有什么样的存储或缓存对读取速度的影响有多大。