“如果您拥有的唯一工具是锤子,将所有东西都当作钉子一样对待,这很诱人。” - 亚伯拉罕马斯洛Clojure中的数据库函数式编程
我需要编写一个工具来转储大型分层(SQL)数据库到XML。该分层结构由一个Person
表和子公司Address
,Phone
等组成。
我倾倒数千行,所以我想这样做增量而不是保持整个XML文件在内存中。
我想将非纯函数代码隔离到应用程序的一小部分。
我在想这可能是探索FP和Clojure并发性的好机会。我还可以向持怀疑态度的同事展示不可变数据和多核利用的好处。
我不确定应用程序的整体架构应该如何。我在想,我可以使用不纯的函数来检索数据库行并返回一个懒惰的序列,然后可以由返回XML片段的纯函数处理。
对于每个Person
行,我可以创建一个Future
并有几个并行处理(输出顺序无关紧要)。
处理完每个Person
后,任务将从Address
,Phone
等表中检索适当的行并生成嵌套的XML。
我可以使用通用函数来处理大多数表,依靠数据库元数据获取列信息,并为需要自定义处理的少数表提供特殊功能。这些功能可以在map(table name -> function)
中列出。
我正在以正确的方式解决这个问题吗?我可以轻松地使用Java在OO中做到这一点,但那不会很有趣。
顺便说一句,有没有关于FP模式或架构的好书?我有几本关于Clojure,Scala和F#的好书,但尽管每篇都涵盖了语言,但没有一本关于函数式编程设计的“大图”。
据我所知,没有一个“FP建筑师”的书。但是,如果您首尾相接地阅读“纯功能数据结构”,那么您肯定会对如何在现实世界中应用FP概念有更好的了解。见http://www.amazon.com/Purely-Functional-Structures-Chris-Okasaki/dp/0521663504 – 2011-01-05 17:16:16
@克里斯史密斯:我有一个在我的亚马逊愿望清单。我会检查出来的。 – Ralph 2011-01-05 17:25:51