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

men*_*ics 5 persistence haskell nosql

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

1) 有 Haskell API

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

3) 读取连续记录的高性能。典型的用例是从某处开始,然后直接向前读取数据——尽快读取可能数百万条记录。

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

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

scl*_*clv 3

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

我所知道的唯一单文件解决方案是 sqlite。当单个数据库需要由多个并发进程访问时,主要是 sqlite 创建者。如果情况并非如此,那么如果您能够大幅扩大规模,我也不会感到惊讶。

此外,如果您只寻找顺序扫描和键值存储,则可以使用 berkeleydb,众所周知,它对于非常大的数据集具有高性能。

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

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