Scala或Clojure函数式编程最佳实践


11

我做了很多自学编码,并获得了并行编程模型的经验:Actor,软件事务存储,数据流。

当我尝试将这些体系结构应用于现实生活时(应用于高负载Web应用程序中),任何模型都不支持数据的持久性和持久性。现实生活中的任务需要最后保存数据。这意味着我仍然必须使用数据库并捕获数据库同步,可能的可伸缩性瓶颈等。

有谁知道使用Akka Actor 软件事务存储器并最终实现持久性的体系结构(src或文本,图表或蓝图)的好例子吗?

欢迎在现实生活中使用事务处理内存,参与者,数据流,元组空间的任何好的示例/想法。


您同时需要akka和stm吗?
om-nom-nom 2012年

您认为持久性是“最终的”似乎很不寻常。我相信“捕获数据库同步,可能的可伸缩性瓶颈等”。出现问题恰恰是因为它们处于事物的中间,而不是最终。
丹·伯顿

同意持久性发生比结束时更频繁

@Stas该问题与(1)Scala和Clojure,(2)最佳实践有什么关系?我所读的是(1)与语言无关的(2)仅与并发(特别是持久性/持久性)有关。
萨基斯克(Sakisk)2012年

Answers:


5

Actor / STM模型和数据库持久性在某种程度上是正交的-您可以轻松地拥有一个而又没有另一个,而且我认为存在混淆两者的危险。

实现持久性(ACID中的D)在事务处理环境中特别复杂,尤其是在分布式环境中,通过消息传递来协调参与者/流程。您会遇到棘手的问题,例如拜占庭将军问题

因此,我认为总会有某种程度的定制解决方案来满足您特定的持久性要求。没有“一刀切”的解决方案。

值得一看(Clojure透视图):


5

actor模型与Command / Query Responsibility Segregation(CQRS)完美配合,因为发送给执行数据操作的actor的消息可用作“ Command”等效项。

那么,这与您的持久性问题有什么关系?好吧,您需要处理内存,并将所有命令写入日志,这是一个便宜的操作,因为它是仅追加操作,并且不时转储快照,以减少必要时重新加载数据库所需的时间(此外,还可以恢复日志使用的空间)。

这是一种非常常见的技术。查看VoltDB和Redis以获得进一步的启发。


4

Rich Hickey有一个崭新的想法,叫做Datomic。这是一种用于持久性,解耦存储,事务管理和查询的新方法。它基于不可变的记录,并使用一种称为Datalog(与Prolog共享功能)的查询语言。关键目标是允许轻松分发和云部署。它依赖于存储即服务(因此不是一个具体的实现,而是通过在线API松散耦合)。

在Clojure中,我们有STM,它给了我们ACI,D缺失了。Datomic添加D。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.