使用Clojure STM处理大型数据集的经验?

使用Clojure STM处理大型数据集的经验?,clojure,stm,Clojure,Stm,我需要决定是否在我参与的Clojure系统中使用STM,因为一个系统需要在单个STM引用中存储几个GB 我想听听任何对使用Clojure STM处理大型索引数据集有任何建议的人的意见,听听他们的经验。性能不会比使用单个ref处理小型数据集的STM差或好。数据集的更新次数比数据集的实际大小更影响性能 如果数据集有一个编写器和多个读卡器,那么性能仍然相当好。然而,如果你有一个读者和许多作者,性能将受到影响 也许更多的信息会帮助我们帮助你更多 我一直在使用Clojure执行一些相当大规模的数据处理任务

我需要决定是否在我参与的Clojure系统中使用STM,因为一个系统需要在单个STM引用中存储几个GB


我想听听任何对使用Clojure STM处理大型索引数据集有任何建议的人的意见,听听他们的经验。

性能不会比使用单个ref处理小型数据集的STM差或好。数据集的更新次数比数据集的实际大小更影响性能

如果数据集有一个编写器和多个读卡器,那么性能仍然相当好。然而,如果你有一个读者和许多作者,性能将受到影响


也许更多的信息会帮助我们帮助你更多

我一直在使用Clojure执行一些相当大规模的数据处理任务(绝对是千兆字节的数据,通常是存储在各种Clojure构造/STM引用中的大量大型Java数组)

只要所有的东西都能放在可用内存中,您就不应该在单个ref中遇到大量数据的问题。ref本身只应用少量固定的STM开销,这与其中包含的任何内容的大小无关


Clojure的标准数据结构(地图、向量等)中内置的结构共享带来了额外的好处-您可以获取10GB数据结构的完整副本,在结构中的任何位置更改一个元素,并保证两个数据结构一起只需要10GB以上的一小部分。这是非常有用的,特别是如果你认为由于STM/并发,你可能会有几个不同版本的数据在任何时候被创建。

我会期待不同的使用模式,我只想知道一般的经验,以了解他们如何在不同的情况下执行。但你的信息很有用,谢谢你的回答。应用程序的读/写访问模式和重试事务速率是多少?另外,你使用一个参考文献还是多个参考文献?我有很多读者,但没有太多的写作争用——通常只有一个作者。没有对事务重试率进行基准测试,但我怀疑它相当低。我对每个逻辑标识使用一个ref,例如“到目前为止所有处理结果的列表”,当各种任务完成时会附加到该列表中