【问题标题】:Can I always keep a whole ArangoDB collection in memory?我可以始终将整个 ArangoDB 集合保存在内存中吗?
【发布时间】:2018-09-12 14:56:47
【问题描述】:

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

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

isVolatile:如果为true,则集合数据将保存在内存中 只有,ArangoDB 不会将数据写入或同步到磁盘。

这几乎是我想要的,但是

卸载集合会导致集合数据被 丢弃。停止或重新启动服务器也会导致完全 集合中的数据丢失

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

【问题讨论】:

    标签: arangodb


    【解决方案1】:

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

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

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

    TLDR 使用 MMFiles 并且您的 loaded 集合存在于 RAM 中,只要您有剩余内存。超过这一点,您最终会进入交换空间,从而对性能造成可怕的后果。

    【讨论】:

    • 感谢您的回答。对不起,你确定吗?我目前正在使用mmfiles,但正如我上面解释的那样,ArandoDB 似乎没有将整个集合一直保存在 RAM 中。此外,还有一个解释表明可以从内存中换出页面here
    • 比如我12小时前启动了机器,用DB工作了2-3小时。我看到arangod 的内存使用量约为 12GB。然后我已经有 9 个小时没有使用机器了,现在我看到 arangod 只使用了 7GB。
    • @elfinorr 我更新了我的答案。我是 arangodb 高级开发人员,所以答案接近事实?
    • 嗯,很明显我不明白我在做什么 ? 再次感谢您!
    猜你喜欢
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    相关资源
    最近更新 更多