存储分层仿真数据的最佳实践

计算科学 数据管理 数据存储 数据分析
2021-12-09 23:17:02

总长,博士

科学计算界公认的存储大量分层结构化数据的最佳实践是什么?例如,SQL 不能很好地处理大型稀疏矩阵。有没有一个很好的工具来构建、存储和分析这种数据?大型强子对撞机的人用什么?

用例详情

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

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

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

最初我认为关系数据库非常适合这个应用程序,因此我使用 python 和 sqlalchemey 编写了一个程序,将数据存储在 SQL 数据库中。然而,在实践中,这个程序运行得并不好。

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

a) 构建和查询的速度非常慢(几小时)
b) 在我的硬盘驱动器上占用的空间比将数据作为非稀疏矩阵的等效纯文本表示形式多一个数量级
c) 在以下情况下占用超过 10 GB 的内存表被读入内存

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

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

更新

一个博士,两份工作,八年后,我仍然没有很好地回答这个问题(尽管我确实发表了一篇关于我自己的 comp bio data 自定义格式的论文)。HDF5 最多可以达到 10 GB,但与 Hadoop/Spark 不兼容,因此不适合真正的大数据。最有前途的新东西是zarr,一个兼容 Spark 的 HDF5 替代品

2个回答

考虑使用HDF5文件格式。HDF5 是一种分层数据存储格式,具有以下几个不错的特性:

  • 平台独立存储:库为您处理小/大字节序
  • 数据集的分层布局:就像文件中的文件系统
  • 大型、可增长的 n 维数组存储
  • 混合数据集类型可以存在于一个文件中(即整数、浮点数等)
  • 自动压缩可用
  • 二进制存储
  • 并行输入/输出

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

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

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

这将让您快速找到您想要的模拟,并为您提供使用稀疏矩阵或进行有效分析所需的任何工具的自由/性能。