(如bdb)上是否有ocaml库存储/使用数据结构。但是,我看着ocaml-bdb,好像它只是存储字符串。我的问题是我有数组存储巨大的数据。当然,我可以将它们序列化成许多文件,或者编码/解码我的数据,并将它们放在数据库或键值db分支上,这是我的最后手段。我想知道是否有更好的方法。在磁盘
在磁盘
回答
HDF4/HDF5文件格式可能符合您的需求。请参阅http://forge.ocamlcore.org/projects/ocaml-hdf/
除了jrouquie提到的HDF4绑定,还有HDF5绑定可用(http://opam.ocaml.org/packages/hdf5/)。取决于您要存储的数据类型,有与GDAL的绑定(http://opam.ocaml.org/packages/gdal/)。
对于适合大阵列的数据,您也可以选择内存映射磁盘上的大文件。例如,请参见https://caml.inria.fr/pub/docs/manual-ocaml/libref/Bigarray.Genarray.html#VALmap_file。虽然它将您与相当严格的磁盘格式联系在一起,但它操作比可用RAM大的数组的操作相对简单。
有过去的OCaml的BerkeleyDB的包装: OCamlDB
显然,最近有人看着它: recent patch for OCamlDB
然而,从hcarty的GDAL绑定可能是生产做好准备,并在密集使用的地方。
HDF5是prolly的答案,但考虑到的问题是有些模糊,另一种解决方案是可能的。
免责声明:我不知道OCaml的(但我知道CAML的光),我知道伯克利数据库(AKA bsddb(AKA BDB))。
但是,我看着ocaml-bdb,好像它只是用来存储字符串。
这可能是在ocaml-bdb
,但实际上它存储字节。我不确定你的情况,因为在Python2中,字节和unicode字符串之间没有区别。直到最近,Python 3才得到了适当的字节类型,并且bdb绑定需要并且吐出字节。也就是说,这种差异是微不足道的,但你宁愿使用字节,因为bdb可以理解和使用。
我的问题是我有一个巨大的存储数据数组。当然,我可以序列化他们到许多文件,或编码/解码,我的数据,并把它们放在数据库
或使用这些键值分贝的东西,这是我最后的手段。
我想知道是否有更好的方法。
这取决于你所需要和数据的外观。
- 如果数据可以全部保留在内存中,则应该将内存转储到文件并加载回去。
如果您需要在多种体系结构或操作系统之间共享数据,则宁愿使用像HDF5这样的序列化框架。请记住,HDF5不处理循环引用。
如果数据不能在内存中留下的所有,那么你需要使用类似BDB(或wiredtiger)。
为什么BDB(或wiredtiger)
简单地说,几十年工作已进入:
- 分割数据
- 存储在磁盘上
- 检索数据
尽可能快。
wiredtiger是BDB的继任者。
所以,是的,你可以分割的文件自己等人。但这需要很多工作。只有专业团队才能做到这一点(彭博社包括......),在管理自己的人中间,有着名的postgresql,mariadb,google和algolia。
有序键值商店像wiredtiger和BDB使用类似的算法,以更高的层次数据库,如PostgreSQL和MySQL或专门的一个类似的Lucene/Solr的或狮身人面像即。 MVCC,B树,LSM,PSSI等等
MongoDB的,因为3.2使用wiredtiger后端存储的所有数据。
有些人认为,key-value存储所不擅长的存储关系型数据,即说,一些项目开始在关键值存储的顶部做分布式数据库。这是一个线索,它是有用的。例如。 FoundationDB或CockroachDB。
键值存储背后的想法是提供一个通用的框架:
- 分割数据
- 存储在磁盘上
- 检索数据
越快越好,给予一些保证(如ACID)和其他好处(如压缩或加密)。
利用这些图书馆提供的电力优势。您需要了解键值组合。
- 1. 如何在磁盘
- 2. 主磁盘与交换磁盘
- 3. Cassandra磁盘io
- 4. 磁盘分区
- 5. 避免磁盘
- 6. ++从磁盘
- 7. 阅读磁盘
- 8. Clojure - 在磁盘上记忆
- 9. urllib.urlretrieve在磁盘上创建
- 10. Django的:在本地磁盘
- 11. MySQL查询在磁盘上
- 12. 检查磁盘Powershell
- 13. 尺寸VS磁盘
- 14. Kvm磁盘增加
- 15. AWS磁盘降级
- 16. AFNetworking - 磁盘容量
- 17. RDFlib'磁盘'存储
- 18. RavenDB磁盘存储
- 19. Cpanel磁盘使用
- 20. Azure磁盘速度
- 21. HDFS磁盘已满
- 22. 蟒蛇:从磁盘
- 23. 的System.OutOfMemoryException从磁盘
- 24. 如何从磁盘
- 25. NSUrlCache磁盘限制?
- 26. Python填充磁盘
- 27. Linux磁盘清理
- 28. WMI关闭磁盘
- 29. NSUserDefaults写入磁盘?
- 30. 崩溃从磁盘
那么,该项目是针对具有2G文件大小限制的hdf4。 – romerun 2012-07-23 01:37:27