Clojure:对大型数据结构进行就地更改的惯用法

时间:2017-06-26 12:52:08

标签: clojure functional-programming

假设您已加载大型数据结构(如数据库中的表索引),现在您想要进行更改。

如果我理解正确,您需要根据当前状态(从磁盘加载的内容)创建一个新状态(包括您更改)并将其分配给您拥有的当前标识。

在大型数据结构中这将非常慢,因为运行时需要复制大量内存。有没有实用的替代方案?

2 个答案:

答案 0 :(得分:2)

  

有没有实用的选择?

如果数据库的选择在您的控制之内,您可以查看Datomic,它旨在使用Clojure。据我所知(不过很多,说实话)

  • 您订阅的数据的差异更新会转发给您;和
  • 数据在客户端持续保持不变 也是如此:如果你掌握它是什么,那就永远不会改变,即使 它是什么(使用不同的句柄)是不同的。

要获得这些特征,请使用the peer library, not the client library

如果我说废话,知识渊博的读者,请告诉我。

答案 1 :(得分:1)

以下是Clojure不可变数据结构的几个很好的概述:

正如评论所说,当你做一些小改动时,他们不会复制整个数据结构。相反," old"和"新"版本共享未发生变化的部分的数据,使得"持久性"数据结构非常有效。