database - Happstack 状态概念和文档?

标签 database haskell concept happstack

我开始制作 Haskell 网络服务器。我决定从 Happstack 和 Happstack-state 开始。而且我感觉很难理解 Happstack 状态的概念和属性。它是一种新型数据库吗?还是只是对象图之类的系统?

你能解释一下它的概念和属性吗(特别是关于 ACID,它如何将数据持久保存在磁盘上!)或者给我一份描述它的文档好吗?

最佳答案

下面是MACID的两个基本介绍:

http://happstack.com/docs/crashcourse/HappstackState.html#happstack_state

http://www.kuliniewicz.org/blog/archives/2009/04/05/happstackstate-the-basics/

唉,这两个都没有涵盖 IxSet,它是一种数据类型,通常与 MACID 一起使用以提供具有多个索引的集合(类似于 SQL 表)。

MACID 是一种“ram 云”风格的持久存储,这意味着您的整个数据集都存储在 RAM 中。目前支持复制。开发版本专注于添加分片支持(除其他外)。

MACID 的独特之处在于它存储普通的 Haskell 数据类型,并且查询是使用普通的 Haskell 函数编写的。您不仅限于 Haskell 数据类型的一小部分,例如 Int 和 String。相反,您几乎可以使用任何用户定义的数据类型。

虽然 MACID 将工作数据集存储在 RAM 中并且不是围绕关系模型构建的,但它仍然提供 ACID 保证。持久性属性确保一旦提交成功返回,如果服务器出现故障(或重启),事件将不会丢失。

持久性是通过将每个更新事件记录到预写日志来实现的。如果服务器出现故障,可以通过重放自上次检查点以来的任何事件来恢复状态。

预写日志中的事件由更新函数的名称和该函数的参数组成。由于更新事件是纯粹的,因此重播它们总是会导致相同的最终状态。

存储在检查点或日志事件中的数据的实际二进制格式是通过创建 Serialize 类的实例指定的。在大多数情况下,这可以通过调用 template-haskell 函数“deriveSerialize”自动完成。还有一个 Migrate 类,用于在您更改数据类型时将值从旧格式迁移到新格式。

这里有一篇关于序列化和迁移机制的旧博文:

http://nhlab.blogspot.com/2008/12/data-migration-with-happs-data.html

该帖子提到“HAppS”,但除了模块名称外,它在 Happstack 中几乎相同。

希望这对您有所帮助。

关于database - Happstack 状态概念和文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5100097/

相关文章:

java - 查询结束后与数据库的连接未关闭

php - 如何排除三个不同表的查询结果?

java - 如何使用 Apache Shiro 将哈希 pws 存储到数据库中?

sqlite - Haskell、Sqlite、池和仆人

UML - 如何建模一个/或/两个(联合)概念?

递归与循环

java - 如何将结果集复制到对象中?

haskell - 为什么使用(>100)部分应用?

haskell - 函数式编程: Where does the side effect actually happen?

java - OSGi 如何解决将 bundle 定义的类转换为 rt.jar 定义的类的任务?