我想测试一下我可以从Datomic中获得多少吞吐量,这个瓶颈就是它的交易所,它确实可以扩展。
通过我使用的相当简单的交易,我获得了 x 的TPS率(由于Datomic的DeWitt条款,我不能告诉你这个数字,但为了给你一个想法,它不是小于5590.92且不超过1,000,000,000),我想以10倍的速度提升,因此交易高峰不会导致延迟数秒。
我给了我的transactor(虚拟)机器12个核心,其中只使用了 y (同样,我不会告诉你这个数字,但是它介于5到12之间)。
创建事务的Datomic对等体位于另一个虚拟机上。
我尝试了dev存储和远程内存中的h2服务器,并且TPS数据大致相同,这就是为什么我认为交易者是瓶颈,而不是存储。当我只注释conn.transactAsync(data)
调用时,Datomic对等体可以轻松地生成更多的事务(在其单线程中),因此瓶颈也不在对等体中。
我可以让Datomic的transactor使用更多的内核或以其他方式扩展交易器吗?对于我的用例即使我只能获得临时提升处理也没关系交易激增只需几秒 - 高TPS率不需要维持超过5秒。
Transactor设置:
memory-index-threshold=32m
memory-index-max=1g
object-cache-max=1g
改变memory-index-max
不应该产生那么大的影响,因为我的测试中的TPS率相对稳定。 (只要memory-index-max用完了,背压就会降低TPS率,但这不是我所看到的)
Transactor始于:
bin/transactor -Xms6g -Xmx6g config/transactor.properties