总长,博士
科学计算界公认的存储大量分层结构化数据的最佳实践是什么?例如,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 替代品