在HDF5文件中组织数据的最佳方法

时间:2015-12-25 12:52:07

标签: python matlab bigdata hdf5

我正在寻找一种有效组织科学数据的方法。可能这将在HDF5中完成,因为这看起来非常方便,但我可以选择其他替代方案。唯一的限制是MATLAB和Python的可访问性。

我的数据是原始层次结构,看起来如下(所有数据都是无符号整数):

ID1|
   |ModuleNumber1|
   |             |Table with 300 rows and 10 columns
   |ModuleNumber2|
   |             |Table with 300 rows and 10 columns
   |
   ....
   |ModuleNumberX|
   |             |Table with 300 rows and 10 columns

ID2
   |ModuleNumber1|
   |             |Table with 300 rows and 10 columns
   |ModuleNumber2|
   |             |Table with 300 rows and 10 columns
   |
   ....
   |ModuleNumberX|
   |             |Table with 300 rows and 10 columns
....
IDX
   |ModuleNumber1|
   |             |Table with 300 rows and 10 columns
   |ModuleNumber2|
   |             |Table with 300 rows and 10 columns
   |
   ....
   |ModuleNumberX|
   |             |Table with 300 rows and 10 columns

乍一看,这似乎很清楚。只需使用HDF5来模拟这种层次结构,如

/ ID / ModuleNumber /

并在里面放一张桌子。 但是,当我以典型的用例方式检索数据时,这似乎很慢,如下所示:

  1. 进行数据库查询(在单独的PostgreSQL数据库中,每个模块存储元数据)以获取合适的ID和ModuleNumbers(数据postselection)
  2. 将拟合ID / ModuleNumbers的整列数据作为数组。每个拟合模块内的此列中的数据将添加到阵列中的当前数据,以计算多个模块上特定单元格的平均值。
  3. 由于此用例非常具体,因此组织我的数据可能比明显的分层数据更好。

    例如,ID并不重要,仅用于选择后的目的。可以使ID成为ModuleNumber的属性以减少层数,但是需要对ModuleNumbers进行全局计数,这与数据库布局并不真正兼容。

    我还可以想象一个没有层次结构的完全平面布局,其中有ID和ModuleNumber的附加列。

    但直到现在我对自己的想法并不满意,也许任何人都可以帮助我找到更好的想法。

    PS:我们谈论的规模是数千张表,文件大小在100MB-1G之间。目标是在阅读时尽可能快。这些文件是只读的,初始创建后不会被修改。

    最佳,

    尼科

0 个答案:

没有答案