2015-01-08 32 views
0

這可能是一個非常愚蠢的問題,至少是一個非常簡單的問題。如果不值得詳細回覆,請指出我的正確方向。目錄和文件到hdf5組和數據集

我的理解是HDF5很適合存儲分層數據。我使用文件系統來存儲我的數據---根目錄,子目錄,數據文件(txt)和元數據文本文件。目錄名稱通常也是描述性的。因此,將這些數據綁定到一個hdf5文件(或多個文件)似乎很自然,這些文件使用目錄作爲組和數據文件作爲數據集。

我的問題是,這樣做有沒有什麼好處?我想通過使用組和/或屬性(如數據庫中的SELECT)來選擇和合並數據集。此外,有沒有工具可以做到這一點?

+0

您可以嘗試詢問ServerFault或SuperUser。這似乎不是一個與編程有關的問題。 – frasnian

回答

1

當然,這是可能的。

例如,我們有一個可視化科學數據的網絡應用程序,它依賴於具有30.000個組的單個250GB HDF5文件,每個組包含多個數據集。組和數據集都有屬性。該網絡應用程序只訪問這個單一的HDF5文件來檢索所有信息。

使用HDF5文件的優點是,它非常便於攜帶,可以用於許多不同的語言(C++,Java,Python等)。這對於存儲二進制數據也非常有效,如果將壓縮和分塊結合起來,那麼即使使用今天的多核CPU,也可以提高性能。

但是HDF5與RDBMS有很大不同。你不能像在數據庫中一樣使用SELECT。你必須迭代(可能遞歸)通過組/數據集。有一些庫(Pandas,PyTables)建立在HDF5之上,並提供更高的抽象。缺點是你可能會失去一些便攜性。

另一種方法是使用混合方法: 您可以將元信息存儲在RDBMS中,並將二進制數據存儲在一個或多個HDF5文件中。這可能會給你兩全其美。

這裏也是有用的庫的列表:

的Python:

  • h5py - 簡單pyhton HDF5包
  • PyTables - 過HDF5數據集高級抽象(對於表的支持)
  • Pandas - 數據分析庫支持hdf5作爲後端。

C++:

的Java:

  • JHI5 - 低級別JNI包裝:非常靈活,但也相當繁瑣的使用。
  • Java HDF object package - 基於JHI5的高級界面。
  • JHDF5 - 所述JHI5層上的高級別接口建築

朱莉婭:

Matlab的:

R:

  • rhdf5(Bioconductor的)

的GUI: