gpt4 book ai didi

Datomic:强大的设置以避免超时和内存不足错误

转载 作者:行者123 更新时间:2023-12-02 10:39:40 26 4
gpt4 key购买 nike

我在具有不同内存量(1GB - 16GB)的各种架构上运行相同的数据支持应用程序。当我批量导入数据时,我经常遇到超时或内存不足错误。

查看文档后,我偶然发现了这个 helpful document (和 this one )似乎概述了在大量导入下获得良好性能的最佳实践。

我对性能的兴趣不如对让导入“正常工作”感兴趣。这引出了我的主要问题:

确保任意大的导入进程在给定机器上终止的最低复杂度配置是多少?

我知道这个配置可能是我的可用内存的函数,这很好。我也明白它可能无法发挥最大性能;那也没关系。但我确实需要知道它会终止。

最佳答案

数据分布

我认为您的问题中缺少的关键信息是数据类型及其分布 available metrics在批量导入期间为您的系统。为什么?

Datomic 的事务率受到后台索引作业成本的限制,而索引成本是新值的分布和数据库大小的函数。

这意味着,例如,如果您有索引属性(即 :db/index),并且在批量导入过程中,这些属性值的分布为随机,您会给索引作业带来很大的压力,因为它会重写越来越多的段。随着数据库大小的增长,索引将主导事务处理程序的工作,并且无法跟上。

处理器内存

如文档中所述,您可以为 object-cache-max 提供的内存越多越好。如果您的数据有很多唯一性约束(即db/unique),这一点尤其重要,因为这将阻止事务处理程序多次获取某些存储段。

根据您的数据分布,增加 memory-index-thresholdmemory-index-max 设置可能会让您的导入运行时间更长...直到索引作业完成跟不上。这似乎就是发生在你身上的事情。

建议

尝试减少内存索引阈值内存索引最大设置。这可能看起来违反直觉,但您将有更好的机会完成任何导入(当然它们会花费更多时间,但您几乎可以保证它们会完成)。关键是让事务处理程序在无法跟上索引作业之前限制您的(对等)请求。

关于Datomic:强大的设置以避免超时和内存不足错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18302498/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com