存储分层模拟数据的最佳实践


13

TL,DR

科学计算界中用于存储大量分层结构数据的最佳实践是什么?例如,SQL在大型稀疏矩阵上不能很好地发挥作用。是否有用于构建,仓储和分析此类数据的好工具?大型强子对撞机的人使用什么?

用例详细信息

我想根据以下层次结构存储蛋白质模拟中的数据:

protein
  |__simulation conditions
  |____|__residues
  |____|____|__conformers
  |____|____|____|__atoms

每个蛋白质都应该知道其每个残基,每个原子都应该知道用于其模拟的条件,等等,反之亦然。

最初,我认为关系数据库将非常适合该应用程序,因此我使用python和sqlalchemey编写了一个程序,该程序将数据存储在SQL数据库中。但是实际上,该程序不能很好地运行。

最大的问题与以下事实有关:由于每个可能的构象体对之间的成对相互作用,在构象体数据级别存在一个N x N矩阵,该矩阵存储势能。矩阵中的大多数条目都是零,因此我以一种稀疏格式将矩阵存储在数据库中的另一个表中,每个条目一行。不幸的是,对于涉及数千个conformer的模拟,成对表仍然以数十万行结尾,并且:

a)构建和查询非常缓慢(几小时)
b)与作为非稀疏矩阵的等效数据纯文本表示相比,我的硬盘驱动器占用了更多的数量级空间
c)在以下情况下占用了超过10 GB的内存:该表被读入内存

我的最终目标是在数据库中存储成千上万次运行(在几十种模拟条件下源自数千种蛋白质),以便可以一起分析所有运行。这意味着代表成对矩阵的表可能会增长到大约十亿行。目前看来,我需要一个Cray或其他共享内存的怪物,以便甚至对该数据库运行单个查询。

我在这里有更好的选择吗?大型强子对撞机的人使用什么?

Answers:


12

考虑使用HDF5文件格式。HDF5是具有多种出色功能的分层数据存储格式:

  • 独立于平台的存储:该库为您提供小/大字节序
  • 数据集的分层布局:就像文件中的文件系统
  • 大型可扩展n维阵列存储
  • 混合数据集类型可以存在于一个文件中(即整数,浮点数等)
  • 自动压缩可用
  • 二进制存储
  • 并行I / O

有C和Fortran接口,以及Python(h5pypytables)包装器。MATLAB也可以读取HDF5。HDF5相当灵活,几乎是一个错误,即它不是“自我描述”的,因此创建了XDMF

我不确定“模拟所用的条件”是什么意思,但是如果这些只是参数的小集合,则可以将它们存储为attribute


3
HDF5中的双向链接很难维护。由于HDF5格式无论如何都是自己的一半,因此您也可以考虑在关系数据库中维护元数据,并将较重的数据保存在单独的文件中(如果需要,可以使用HDF5)。
杰德·布朗

0

使用数据库非常有助于您组织/查找模拟数据(按蛋白质搜索,按模拟参数搜索)。然后,数据库应告诉您在磁盘上哪里可以找到相关信息,我想最好是在每次模拟运行的基础上,以最方便加载进行分析的任何文件类型(无论是自定义的还是从您使用的任何模拟套件中)存储该信息。正在使用)。

这将使您迅速找到所需的仿真,并为您提供使用稀疏矩阵或进行有效分析所需的任何工具的自由度/性能。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.