数据分布
我认为您的问题中缺少的关键信息是数据类型及其分布以及批量导入期间系统的可用指标。为什么?
Datomic 的事务率受到后台索引作业成本的限制,并且该索引的成本是新值分布和数据库大小的函数。
这意味着,例如,如果您有索引属性 (ie :db/index
),并且随着您的批量导入,这些属性值的分布是随机的,您将在索引作业重写时施加很大压力越来越多的细分市场。随着数据库大小的增长,索引将主导事务处理程序的工作,并且无法赶上。
事务处理内存
如文档中所述,您可以提供的内存object-cache-max
越多越好。如果您的数据有很多唯一性约束(即db/unique
),这一点尤其重要,因为这将阻止交易者多次获取某些存储段。
根据您的数据分布,增加memory-index-threshold
和memory-index-max
设置可能会让您的导入运行更长时间......直到索引作业跟不上。这似乎就是发生在你身上的事情。
建议
尝试减少memory-index-threshold
和memory-index-max
设置。这可能看起来违反直觉,但您将有更好的机会完成任何导入(当然它们会花费更多时间,但您几乎可以保证它们会完成)。关键是让交易者在无法赶上索引作业之前限制您的(对等)请求。