- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我开始制作 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/
我正在尝试扩展 Happstack crash course具有一些附加功能的博客:在主页上显示所有标签的列表。 我的博客记录是这样的: data Blog = Blog { nextPost
这是一个 Haskell 新手问题,可能与 IO() 相关。单子(monad)。 我在 Happstack.Server 中有一个函数生成文件上传响应的程序。 postFile = do method
我开始制作 Haskell 网络服务器。我决定从 Happstack 和 Happstack-state 开始。而且我感觉很难理解 Happstack 状态的概念和属性。它是一种新型数据库吗?还是只是
我找不到真正的方法来捕获 happstack 应用程序中纯函数引发的异常。我试过this solution 。当 IO 函数抛出异常时,它可以很好地工作。但是当纯函数抛出异常时它无法处理它。我的代码:
我对 Haskell 有点菜鸟,所以我不完全确定这是 Happstack 问题还是一般 Haskell 问题。 这是我遇到的困难的一个例子。这段代码“理论上”渲染了一些内容,但实际上抛出了一个错误:
我有一个简单的 hello world happstack 应用程序: module Main where import Happstack.Server (nullConf, simpleHTTP,
我想知道在 Happstack 网页中包含 CSS 的最佳方法是什么。我试过谷歌,没有运气,所以我想我会在这里问。 最佳答案 对我来说,最简单的方法是从静态文件夹中为它们提供服务。例如添加一个处理程序
happstack 教程提供了以下示例: main :: IO () main = simpleHTTP nullConf $ msum [ do methodM GET
我似乎找不到关于此主题的任何文档、任何博客文章或其他资源。 From what I have seen so far there seems to be support for FastCGI但是该项
如何使用MonadBaseControl来自 monad-control抬起simpleHTTP happstack-server 中定义的函数? simpleHTTP 的当前类型: simpleHT
谁能帮我“翻译”以下从 happs 到 happstack: module Main where import HAppS.Server.AlternativeHTTP import HAppS.Se
为什么我做不到 z = x? 但我能做到吗? y s = x s 我是 Haskell 新手 这就是我在 GHCi 中一直在尝试的: Prelude> import Happstack.Server
我尝试编写一个使用 SSL 的简单 Happstack 应用程序。使用此源代码: module Main where import Happstack.Server( ok ) import Happ
有没有办法在 Haskell 服务器端(最好使用 Happstack)使用安全的 websockets (wss://)? 我尝试在 Cabal 中搜索 websocket 服务器实现,我得到了 we
上周,我们三个人花了两天时间尝试使用 Happstack 构建一个简单的 Web 应用程序。 .我们关注的一个问题是身份验证,似乎曾经有一个 Happstack.Auth看起来真的很好的包裹。不幸的是
我想创建一个可以对数据库进行大量访问的 Happstack 应用程序。我认为底部带有 IO 的 Monad Stack 和顶部类似数据库写入的 monad(中间是日志写入器)将有助于在每次访问中具有清
每当我在网站中使用表单时,我都需要向它传递一个“action”属性(我不想将其留空,因为我更喜欢验证标记)。现在它看起来像这样: registerPage = dir "test" $ do
所以我有一个项目,我认为学习起来很简单,但又足够复杂,很有趣,我想使用 Happstack 库来编写。在最基本的层面上,这个项目只是一个花哨的文件服务器,带有一些特定于域的 REST 方法(或者其他什
除了 Method 数据类型没有 PATCH 的构造函数之外,我想知道是否可以在 Happstack 中匹配 PATCH 请求: data Method = GET | HEAD | POST | P
我正在尝试使用 Happstack 实现一个简单的请求处理程序: main :: IO () main = simpleHTTP nullConf app app :: ServerPart Resp
我是一名优秀的程序员,十分优秀!