1

我目前正在从事一个需要处理千兆字节科学数据集的项目。数据集采用非常大的整数和浮点数数组(30,000 个元素)的形式。这里的问题是它们太大太适合内存,所以我需要一个磁盘解决方案来存储和使用它们。为了让这个问题更有趣,我被限制使用 32 位架构(因为这是为了工作),我需要尝试最大限度地提高这个解决方案的性能。

到目前为止,我一直在使用 HDF5,它运行良好,但我发现它有点太复杂了,无法使用。所以,我认为下一个最好的办法是尝试 NoSQL 数据库,但我找不到将数组存储在数据库中的好方法,除非将它们转换为字符数组并像这样存储它们,这导致了很多坏指针头疼。

所以,我想知道你们推荐什么。也许您有一种不那么痛苦的方式来使用 HDF5,同时最大限度地提高性能。或者,也许您知道一个 NoSQL 数据库可以很好地存储这种类型的数据。或者也许我在这方面走错了方向,你想给我一些感觉。

无论如何,我很感激你们能给我的任何智慧之言:)

4

3 回答 3

3

给自己一些感觉,并使用 HDF5 等生产级库。所以你觉得它太复杂了,但你找到它的高级 API了吗?

如果您不喜欢这个答案,请尝试使用新兴的阵列数据库之一,例如SciDBrasdamanMonetDB。不过,我怀疑,如果您对 HDF5 犹豫不决,那么您将对其中任何一个犹豫不决。

根据我的观点和经验,如果您要长时间使用大型科学数据集,学习如何正确使用 HDF5 等工具是值得的。如果你选择了一个工具,比如 NoSQL 数据库,它不是为手头的任务而设计的,那么,虽然它最初可能更容易使用,但最终(在很长一段时间内是我的猜测)它将缺少你需要的功能或想要,你会发现自己不得不围绕它的不足进行编程。

为工作选择合适的工具之一,并学习如何正确使用它。

于 2013-10-07T12:29:38.817 回答
2

我从事科学计算多年,我认为 HDF5 或 NetCDF 是一种适合您使用的数据格式。它可以提供高效的并行读/写,这对于处理大数据很重要。

另一种解决方案是使用数组数据库,如 SciDB、MonetDB 或 RasDaMan。但是,如果您尝试将 HDF5 数据加载到数组数据库中,将会有点痛苦。我曾经尝试将 HDF5 数据加载到 SciDB 中,但它需要一系列数据转换。您需要知道是否会经常查询数据。如果不是经常,那么耗时的加载可能是不值得的。

您可能对这篇论文感兴趣。它可以让您使用 SQL 直接查询 HDF5 数据。

于 2013-12-10T18:35:55.627 回答
2

假设您的数据集确实足够大(例如,不是 30,000 个元素,而是一个 30,000x30,000 的双精度数组),您可能需要考虑STXXL。它提供的接口旨在(并在很大程度上成功地)模仿 C++ 标准库中的集合,但旨在处理太大而无法放入内存的数据。

于 2013-10-06T15:42:32.020 回答