python - 科学模拟数据的数据持久化,Mongodb + HDF5?

标签 python mongodb orm scientific-computing hdf5

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

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

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

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

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

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

TIA。

最佳答案

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

I need to do online analysis, track of the dependency of derived data on raw data, and perform queries like "give me the waveforms for temperature>400 and position near (x0,y0)".

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

Most objects have heavy data (several MB of binary numeric array), as well as some light data (temperature, position etc).

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

The total data generate rate is several GB per hour.

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

关于python - 科学模拟数据的数据持久化,Mongodb + HDF5?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8998564/

相关文章:

python - 如何在python中读取html标签内的多个变量值

python - 有没有办法传入一个参数来匹配neo4j中的标签

MongoDB oplog 包含许多 Noops

mongodb - 按相对数组元素位置查找文档

language-agnostic - 代码生成器与 ORM 与存储过程

python - 如何解析 XML,将特定标签或其内容保留为纯文本?

python - 发件人地址与经过验证的发件人身份不匹配。在解决此错误之前无法发送邮件

node.js - MongoClient.connect不执行回调函数

php - Symfony 2创建子实体类对象时出错

java - Hibernate 两表一对象