【问题标题】:Data persistency of scientific simulation data, Mongodb + HDF5?科学模拟数据的数据持久化,Mongodb + HDF5?
【发布时间】:2012-02-18 09:24:44
【问题描述】:

我正在开发一个涉及多个物理场和模拟器的 Monte Carlo 模拟软件包。我需要进行在线分析,跟踪派生数据对原始数据的依赖性,并执行诸如“给我温度> 400 和 (x0,y0) 附近位置的波形”之类的查询。所以内存中的数据模型比较复杂。

应用程序是用 Python 编写的,每个模拟结果都被建模为一个 Python 对象。 它每小时产生约 100 个结果(对象)。大多数对象都有大量数据(几 MB 的二进制数字数组),以及一些轻型数据(温度、位置等)。总数据生成速率为每小时几 GB。

我需要一些数据持久性解决方案和易于使用的查询 API。 我已经决定将大量数据(数字数组)存储在 HDF5 存储中。 我正在考虑使用 MongoDB 作为对象持久性(仅限轻数据),以及在 HDF5 中索引重数据。 MongoDB 的对象持久性很简单,查询接口看起来足够强大。

我知道 sqlalchemy+sqlite 选项。但是,SqlAlchemy 似乎不自然地支持将大量数据流式传输到 HDF5,并且固定模式很麻烦。

我知道这篇文章( Searching a HDF5 dataset),但是“索引表”本身需要一些内存索引来快速查询。

我想知道在我加入之前是否应该考虑其他替代解决方案?还是我在计划中忽略了任何问题?

TIA。

【问题讨论】:

    标签: python mongodb orm scientific-computing hdf5


    【解决方案1】:

    关于 Mongo 的一些知识可能与您描述的情况有关,以及为什么它可能很适合:

    我需要进行在线分析,跟踪衍生数据对原始数据的依赖性,并执行诸如“给我温度>400 和 (x0,y0) 附近位置的波形”之类的查询。

    Mongo 有一种灵活的查询语言,可以很容易地进行这样的查询。还支持地理空间 (2D) 索引 - 此外,如果您需要非常频繁地查询位置和温度,您可以在 (温度、位置) 上创建复合索引,这将确保查询始终执行良好。

    大多数对象都有大量数据(几 MB 的二进制数字数组),以及一些少量数据(温度、位置等)。

    MongoDB 中的每个文档最多可以容纳 16MB 的数据,并且还支持二进制字段类型 - 因此将几兆二进制嵌入到一个字段中,并通过查询其他字段来检索它会相对简单数据。如果您预计需要超过 16MB,您还可以使用 mongodb 的 GridFS API,它允许您在磁盘上存储任意大的二进制数据 blob 并快速检索它们。

    总数据生成速率为每小时几 GB。

    对于像这样一个快速增长的大型数据集,您可以创建一个分片设置,这将允许您添加服务器以适应大小,无论它有多大。

    【讨论】:

    • 我们需要 HDF5 来存储数值数组,例如分块,部分IO,MPI支持,有损和无损压缩等。我们打算使用HDF5作为永久存储,相对固定的模式,而在应用程序运行时使用Mongodb作为索引。应用中的统计算法可能经常变化,所以每次schema有明显变化时,我们都会从HDF5存储中重建Mongodb索引。
    【解决方案2】:

    你看过Vistrails吗?

    【讨论】:

    • 非常感谢您的指点。我浏览了 Visrails 文件。我的印象是 VisTrail 非常适合后期处理和图形制作。我想我的应用程序更具体地解决了一个问题,并且需要
    • 对用户隐藏很多分析细节。我正在阅读它的源代码,看看数据是如何存储在 VisTrail 中的,希望我能从中学到一些东西。 VisTrail 是一款令人印象深刻的软件,我希望我作为一名研究生拥有它。谢谢。
    猜你喜欢
    • 2010-11-07
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    • 2019-06-27
    • 2012-04-15
    • 1970-01-01
    相关资源
    最近更新 更多