haskell - 节省空间的嵌入式 Haskell 持久性解决方案

标签 haskell persistence nosql

我正在寻找具有以下标准的持久性解决方案(可能是 NoSQL 数据库?或其他...):

1) 有一个 Haskell API

2) 磁盘空间是否有效——数据库可以轻松获取许多千兆字节的数据,但我需要它在典型的桌面上运行良好。我需要尽可能有效地存储数据的东西。因此,例如,将字段名称存储在记录中会很糟糕。

3)读取顺序记录的高性能。典型的用例是从某个地方开始,然后直接读取数据——尽可能快地读取数百万条记录。

4) 数据基本上从不改变(只有在发现数据不正确时才会改变),只是记录

5) 它应该直接作用于可以轻松移动/复制的文件。它不应该调用单独的运行服务器。

最佳答案

如果您在没有其他运行进程的情况下删除“单个文件”要求,则每个标准 RDBMS 都可以满足其他所有要求,具体取决于数据类型,有时尤其是列式存储。

我知道的唯一单文件解决方案是 sqlite。主要是当单个数据库需要被多个并发进程访问时的sqlite创始人。如果不是这种情况,那么如果您可以显着扩大规模,我不会感到惊讶。

此外,如果您只是在寻找顺序扫描和键值存储,您可以选择 berkeleydb,它以对非常大的数据集具有高性能而著称。

有用于与 sqlite 和 berkeleydb 对话的高质量 Haskell 绑定(bind)。

编辑:仅对于顺序访问,使用二进制或 Cereal 包滚动您自己的层也非常简单——您基本上需要编写一个辅助函数来按顺序而不是一次包装文件中的读取记录。折叠它们的抽象也很好。然后,您可以决定追加到单个文件,或者在您进行时将您的写入分散到文件中。无论哪种方式,这都是最轻量级和最直接的选择。唯一的缺点是不得不担心持久性——在存在中断的情况下安全写入,以及一个好的数据库解决方案应该为你处理的所有其他事情。

关于haskell - 节省空间的嵌入式 Haskell 持久性解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4569144/

相关文章:

haskell - 如何在 GHCI 中查找多个导入方法的类型签名

haskell - 尝试安装 cabal 包 sdl-mpeg 找不到包含文件 smpeg.h

android - 有没有人试过在 Android 上使用 javax.persistence?

python - 在 cassandra DB 中插入字典

azure - “加入”DocumentDB 集合 (NoSQL)

networking - 为什么在 Haskell 中使用 Handle 而不是任何类型的网络?

haskell - 使用 Maybe 返回函数映射和过滤 Maybe 列表

java - 使用 entityManager.persist(Object) 插入 ... 值;

php - 如何在 php 中暂停执行、保存状态并稍后从同一点继续?

ruby-on-rails - 使用 Redis 作为主要的 Rails 存储