我需要决定是否在我参与的 Clojure 系统中使用 STM,因为系统需要将几个 GB 存储在单个 STM 参考中。
我想听听任何对使用 Clojure STM 和大型索引数据集有任何建议的人的意见,以了解他们的经验。
我一直在将 Clojure 用于一些相当大规模的数据处理任务(肯定是千兆字节的数据,通常是存储在各种 Clojure 构造/STM refs 中的大量大型 Java 数组)。
只要所有内容都适合可用内存,您就不应该在单个参考中遇到大量数据的问题。ref 本身仅应用少量固定的 STM 开销,该开销与其中包含的任何内容的大小无关。
Clojure 的标准数据结构(映射、向量等)中内置的结构共享是一个不错的额外好处 - 您可以获取 10GB 数据结构的完整副本,在结构中的任何位置更改一个元素,并保证两者数据结构总共只需要超过 10GB 的一小部分。这非常有帮助,特别是如果您考虑到由于 STM/并发,您可能会在任何时候创建多个不同版本的数据。
性能不会比涉及单个参考和小数据集的 STM 更差或更好。数据集的更新次数比数据集的实际大小更能影响性能。
如果您有一个数据集的作者和许多读者,那么性能仍然会非常好。但是,如果您有一个读者和许多作者,性能将会受到影响。
也许更多信息会帮助我们为您提供更多帮助。