首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Happstack-state概念和文档?

Happstack-state概念和文档?
EN

Stack Overflow用户
提问于 2011-02-24 11:37:16
回答 2查看 646关注 0票数 5

我开始制作Haskell web服务器。我决定从Happstack和Happstack-state开始。我觉得很难理解Happstack-state的概念和属性。它是一种新的数据库吗?或者仅仅是类似于对象图的系统?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-25 09:01:12

以下是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 cloud“风格的持久存储,这意味着您的整个数据集都存储在RAM中。它目前支持复制。开发版本专注于添加分片支持(以及其他功能)。

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

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

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

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

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

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

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

这篇文章提到了“HAppS”,但除了模块名称之外,它在Happstack中几乎是一样的。

希望这能有所帮助。

票数 5
EN

Stack Overflow用户

发布于 2011-02-24 20:26:46

MACID不是一个数据库,最重要的是它只是一个ACID框架,也就是说,它关心事务的安全性,这正是通过在磁盘上保存事务日志来实现的。最重要的是,你可以使用IxSet,这是类固醇和标准选择的集合,但你也可以自己选择。

恐怕我所知道的最好的文档是源代码本身。HappStack是完全没有文档的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5100097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档