(如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. 避免磁盤
- 4. 閱讀磁盤
- 5. Django的:在本地磁盤
- 6. MySQL查詢在磁盤上
- 7. Cpanel磁盤使用
- 8. HDFS磁盤已滿
- 9. NSUserDefaults寫入磁盤?
- 10. RavenDB磁盤存儲
- 11. AWS磁盤降級
- 12. 檢查磁盤Powershell
- 13. 崩潰從磁盤
- 14. 磁盤配置IIS
- 15. Kvm磁盤增加
- 16. 的System.OutOfMemoryException從磁盤
- 17. RDFlib'磁盤'存儲
- 18. 寫CFArray到磁盤
- 19. 如何從磁盤
- 20. NSUrlCache磁盤限制?
- 21. 蟒蛇:從磁盤
- 22. 獲取脫機磁盤的邏輯磁盤序列號
- 23. 創建新磁盤時gcloud中的磁盤類型混淆
- 24. 保存與列表列的磁盤到磁盤
- 25. 廣告磁盤空間vs實際磁盤空間
- 26. 託管磁盤和非託管磁盤之間的區別
- 27. app-debug.apk在磁盤上不存在
- 28. 檢查磁盤豐滿
- 29. Readyboost v磁盤緩存
- 30. 鏈接到本地磁盤
那麼,該項目是針對具有2G文件大小限制的hdf4。 – romerun 2012-07-23 01:37:27