Python 科学模拟数据的数据持久性,Mongodb+;HDF5?

Python 科学模拟数据的数据持久性,Mongodb+;HDF5?,python,mongodb,orm,scientific-computing,hdf5,Python,Mongodb,Orm,Scientific Computing,Hdf5,我正在开发一个蒙特卡罗模拟软件包,它涉及多个物理和模拟器。我需要进行在线分析,跟踪导出数据对原始数据的依赖性,并执行诸如“为我提供温度>400和位置(x0,y0)附近的波形”之类的查询。因此,内存中的数据模型相当复杂 应用程序是用Python编写的,每个模拟结果都作为Python对象建模。 每小时产生约100个结果(对象)。大多数对象都有重数据(数MB的二进制数字数组)以及一些轻数据(温度、位置等)。总数据生成速率为每小时几GB 我需要一些数据持久性解决方案和易于使用的查询API。 我已经决定将

我正在开发一个蒙特卡罗模拟软件包,它涉及多个物理和模拟器。我需要进行在线分析,跟踪导出数据对原始数据的依赖性,并执行诸如“为我提供温度>400和位置(x0,y0)附近的波形”之类的查询。因此,内存中的数据模型相当复杂

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

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

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

我知道这个帖子( ),但“索引表”本身需要一些内存中的索引来进行快速查询

我想知道在我开始之前是否有其他的解决方案?或者在我的计划中有没有我忽略的问题


TIA.

您看过吗?

关于Mongo的一些需要了解的事情,可能与您描述的情况有关,以及为什么它可能很适合:

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

Mongo有一种灵活的查询语言,使得这样的查询非常容易。地理空间(2D)索引也受支持—另外,如果您需要经常查询位置和温度,可以在(温度、位置)上创建复合索引,这将确保查询始终运行良好

大多数对象都有重数据(数MB的二进制数字数组)以及一些轻数据(温度、位置等)

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

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


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

非常感谢您提供的指针。我浏览了一下这份文件。我的印象是VisTrail非常适合后期处理和图形制作。我想我的应用程序更具体地针对一个问题,需要隐藏用户的许多分析细节。我正在阅读它的源代码,看看数据是如何存储在VisTrail中的,希望我能从中学到一些东西。VisTrail是一款令人印象深刻的软件,我希望我是一名研究生。谢谢。我们需要HDF5,因为它具有存储数字数组的良好功能,例如分块、部分IO、MPI支持、有损和无损压缩等。我们打算使用HDF5作为永久存储,这是一种相对固定的模式,同时在应用程序运行时使用Mongodb作为索引。应用程序中的统计算法可能会经常更改,因此每次模式发生重大更改时,我们都会从HDF5存储中重建Mongodb索引。