我是天体物理学的研究生。我使用十多年来大多数人开发的代码运行大型模拟。有关这些代码的示例,您可以查看小工具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的东西”真的很有趣/强大。您可以现在做类似的事情,但您必须在较低级别工作。当然,考虑到数据有多大,并且取决于你正在做什么,为了性能起见,在低级别工作可能是件好事。
答案 0 :(得分:4)
我缺乏解释的理由/等:
“更好”是什么意思?结构更好?他似乎暗示“未格式化的二进制文件”是一个问题 - 所以也许这就是他更好的意思。如果是这样,他将需要具有某种结构的东西 - 因此是第一对建议。
是的,有几个。结构化和“非结构化” - 他是否想要结构,或者他是否乐意将它们保留为某种“无格式二进制格式”?我们仍然不知道 - 所以我建议检查一些分布式文件系统。
再一次,OP是否想要更好的结构,或者不是吗?似乎他想要两者 - 更好的结构和更快......也许缩放OUT会给他这个。这进一步强化了我列出的前几个选项。
是否有IO要求?成本限制?这些是什么?
我们在这里无能为力。没有“银弹”存储解决方案。我们在这里要求的只是“大量数据”和“我不知道我是否喜欢缺乏结构,但我不愿意增加我的IO以适应任何其他结构”......所以我不知道他期待什么样的答案。除了缺乏结构之外,他没有列出关于他现有解决方案的单一投诉 - 而且他已经表示他不愿意支付任何开销来做任何事情......那么......?