Serialization 磁盘上是否有ocaml库存储/使用数据结构

Serialization 磁盘上是否有ocaml库存储/使用数据结构,serialization,ocaml,berkeley-db,Serialization,Ocaml,Berkeley Db,像bdb。然而,我查看了ocaml bdb,它似乎只存储字符串。我的问题是我有存储巨大数据的阵列。当然,我可以将它们序列化为许多文件,或者对我的数据进行编码/解码并将它们放在数据库或那些键值数据库中,这是我最后的选择。我想知道是否有更好的方法。HDF4/HDF5文件格式可能适合您的需要。请参见除了jrouquie提到的HDF4绑定之外,还有可用的HDF5绑定()。根据存储的数据类型,有到GDAL()的绑定 对于可以放入bigarray的数据,您还可以选择在磁盘上映射一个大文件。例如,见。虽然它将

像bdb。然而,我查看了ocaml bdb,它似乎只存储字符串。我的问题是我有存储巨大数据的阵列。当然,我可以将它们序列化为许多文件,或者对我的数据进行编码/解码并将它们放在数据库或那些键值数据库中,这是我最后的选择。我想知道是否有更好的方法。

HDF4/HDF5文件格式可能适合您的需要。请参见

除了jrouquie提到的HDF4绑定之外,还有可用的HDF5绑定()。根据存储的数据类型,有到GDAL()的绑定


对于可以放入bigarray的数据,您还可以选择在磁盘上映射一个大文件。例如,见。虽然它将您与一种相当严格的磁盘格式联系在一起,但它确实使操作大于可用RAM的阵列变得相对简单。

过去有一个ocaml BerkeleyDB包装器:

显然最近有人调查过:

然而,来自hcarty的GDAL绑定可能已经准备好生产,并且在某些地方得到了大量使用


另外,opam中也有dbm的绑定:

HDF5通常是答案,但鉴于问题有些模糊,另一种解决方案是可能的

免责声明:我不知道ocaml(但我知道caml light)和伯克利数据库(AKA.bsddb(AKA bdb))

然而,我查看了ocaml bdb,它似乎只存储字符串

这在ocamlbdb中可能是正确的,但实际上它存储字节。我不确定您的情况,因为在Python2中,unicode字符的字节和字符串之间没有区别。直到最近,Python3才有了一个合适的字节类型,bdb绑定获取并吐出字节。也就是说,区别是微妙的,但您更愿意使用字节,因为bdb理解和使用的是字节

我的问题是我有存储巨大数据的阵列。当然,我可以将它们序列化为许多文件,或者对我的数据进行编码/解码,并将它们放在数据库中

或者使用那些关键的db值,这是我最后的选择

我想知道是否有更好的办法

这取决于您的需要和数据的外观

  • 如果数据都可以保留在内存中,那么您最好将内存转储到一个文件并重新加载
如果您需要在多个体系结构或操作系统之间共享数据,而不是共享数据,那么您更愿意使用像HDF5这样的序列化框架。请记住,HDF5不处理循环引用

如果数据不能全部保存在内存中,则需要使用类似bdb(或wiredtiger)的工具

为什么使用bdb(或wiredtiger) 简单地说,几十年的工作已经进入:

  • 分割数据
  • 将其存储在磁盘上
  • 检索数据
尽可能快

wiredtiger是bdb的继任者

是的,你可以自己分割这些文件,但是这需要很多工作。只有专门的公司才能做到这一点(包括彭博社…),在管理自己的人中,有著名的postgresql、mariadb、谷歌和谷歌

有序键值存储(如wiredtiger和bdb)使用类似于更高级别数据库(如postgresql和mysql)的算法,或专门的数据库(如lucene/solr或sphinx),如mvcc、btree、lsm、PSSI等

MongoDB从3.2开始使用wiredtiger后端存储所有数据

一些人认为键值存储不擅长存储关系数据,这表示有几个项目开始在键值存储之上开发分布式数据库。这是一个有用的线索。例如,基金会数据库或蟑螂数据库

关键价值存储背后的理念是提供一个通用框架,用于:

  • 分割数据
  • 将其存储在磁盘上
  • 检索数据
尽可能快地提供一些保证(如ACID)和其他好东西(如压缩或加密)


利用这些图书馆提供的能源。您需要了解键值组合。

好吧,该项目的目标是hdf4,它有2G文件大小限制。