数据存储区用于大型天体物理学模拟数据

时间:2011-06-28 22:08:03

标签: database file-io filesystems bigdata

我是天体物理学的研究生。我使用十多年来大多数人开发的代码运行大型模拟。有关这些代码的示例,您可以查看小工具http://www.mpa-garching.mpg.de/gadget/和enzo http://code.google.com/p/enzo/。这些绝对是两个最成熟的代码(它们使用不同的方法)。

这些模拟的输出巨大。根据您的代码,您的数据会有所不同,但它始终是大数据。您通常需要数十亿颗粒子和细胞来做任何切合实际的事情。最大的运行是每个快照TB,每个模拟数百个快照。

目前,读取和编写此类数据的最佳方式似乎是使用HDF5 http://www.hdfgroup.org/HDF5/,这基本上是一种使用二进制文件的有组织方式。与使用自定义标题块的无格式二进制文件相比,这是一个巨大的改进(仍然让我做噩梦),但我不禁想到有更好的方法可以做到这一点。

我认为纯粹的数据大小是这里的问题,但是是否有某种数据存储可以有效地处理数TB的二进制数据,或者是二进制文件在这一点上唯一的方式呢?

如果有帮助,我们通常会按列存储数据。也就是说,你有一个所有粒子id的块,所有粒子位置的块,粒子速度块等等。它不是最漂亮的,但它是在某些体积中像粒子查找这样的东西最快的。

编辑:抱歉对这些问题含糊不清。史蒂夫是对的,这可能只是数据结构的问题,而不是数据存储方法。我现在必须跑,但我会在今晚或明天晚些时候提供更多细节。

编辑2:因此,我越是关注这一点,我就越发现这可能不再是数据存储问题了。无格式二进制文件的主要问题是正确读取数据的所有麻烦(获取块大小和顺序正确并且确定关于它)。 HDF5几乎解决了这个问题,并且在文件系统限制得到改善之前不会有更快的选择(感谢Matt Turk)。

新问题可能归结为数据结构。尽管HDF5不是最好的查询接口,但我们可以获得高性能。习惯于数据库,我认为能够查询类似“在任何时间给我所有粒子速度超过x的东西”真的很有趣/强大。您可以现在做类似的事情,但您必须在较低级别工作。当然,考虑到数据有多大,并且取决于你正在做什么,为了性能起见,在低级别工作可能是件好事。

1 个答案:

答案 0 :(得分:4)


修改

我缺乏解释的理由/等:

  • OP说:“[HDF5]比使用自定义标题块的无格式二进制文件有了很大的改进(仍然让我做噩梦),但我不禁想到有更好的方法可以做到这一点。”< / LI>

“更好”是什么意思?结构更好?他似乎暗示“未格式化的二进制文件”是一个问题 - 所以也许这就是他更好的意思。如果是这样,他将需要具有某种结构的东西 - 因此是第一对建议。

  • OP说:“我想这里的数据大小是绝对的问题,但是有哪种数据存储可以有效地处理数TB的二进制数据,或者二进制文件是目前唯一的方法吗?”

是的,有几个。结构化和“非结构化” - 他是否想要结构,或者他是否乐意将它们保留为某种“无格式二进制格式”?我们仍然不知道 - 所以我建议检查一些分布式文件系统。

  • OP说:“如果它有帮助,我们通常按列存储数据。也就是说,你有一个所有粒子id的块,所有粒子位置的块,粒子速度块等等。它不是最漂亮的,但它是最快的做一些像粒子查找的东西。“

再一次,OP是否想要更好的结构,或者不是吗?似乎他想要两者 - 更好的结构和更快......也许缩放OUT会给他这个。这进一步强化了我列出的前几个选项。

  • OP说(评论中):“我不知道我们是否可以接受io的打击。”

是否有IO要求?成本限制?这些是什么?

我们在这里无能为力。没有“银弹”存储解决方案。我们在这里要求的只是“大量数据”和“我不知道我是否喜欢缺乏结构,但我不愿意增加我的IO以适应任何其他结构”......所以我不知道他期待什么样的答案。除了缺乏结构之外,他没有列出关于他现有解决方案的单一投诉 - 而且他已经表示他不愿意支付任何开销来做任何事情......那么......?