我是否可以始终在内存中保留整个ArangoDB集合?

时间:2018-08-03 18:58:58

标签: arangodb

当我第一次将集合加载到内存中时,它全部都在内存中(我可以在任务管理器中看到它),但是随着时间的推移,我可以看到{{{ 1}}过程。此外,当我执行查询并从该集合中检索数据时,我可以看到磁盘使用量在短时间内不断增长,并且已用RAM的大小也在不断增长。

我想避免它。我该怎么做? 我看到集合具有属性arangod

  

isVolatile:如果为true,则收集数据将保留在内存中   仅此选项,ArangoDB不会将数据写入或同步到磁盘。

这几乎是我想要的,但

  

卸载集合将导致集合数据被删除   丢弃。停止或重新启动服务器也会导致已满   馆藏中的数据丢失

我可以以某种方式将整个集合保留在内存中,但在卸载后不会丢失数据吗?

1 个答案:

答案 0 :(得分:1)

确保集合位于RAM中的唯一方法是使用MMFiles引擎。使用RocksDB无法保证。两次完整的集合扫描也应导致RocksDB集合被加载到RAM。但是,当您耗尽内存时,一些数据会再次被卸载。

仅由于内存数字已退回,并不表示正在卸载收集数据。这是有关MMF的维基百科文章:https://en.wikipedia.org/wiki/Memory-mapped_file。因此,只要加载了集合(当您访问它的数据或专门调用load方法时立即发生),它就驻留在RAM中。

关于数据丢失的问题:您有2种不同的策略将数据同步到磁盘,可以从以下两种策略中选择:wait-for-sync true或false。可以在启动时设置此参数-然后影响所有数据库和所有集合-或在最初创建它们时基于每个集合进行设置。顾名思义,它指的是数据点被视为已提交并报告给客户端的点。为了提高性能和降低安全性,可以将该值设置为false。在这种情况下,如果计算机或磁盘突然断电,则可能会丢失几秒钟的数据。

TLDR使用MMFiles,并且您的loaded集合生活在RAM中,只要您有剩余的内存即可。除此之外,您最终会陷入交换空间,从而对性能造成可怕的后果。