【发布时间】:2012-10-26 09:55:50
【问题描述】:
我正在构建一个数据采集系统。采集的数据通常由 15 个信号组成,每个信号以(比如说)500 Hz 的频率进行采样。也就是说,每秒大约 15 x 500 x 4 字节(有符号浮点数)将到达并且必须保持。
以前的版本是基于 .NET (C#) 构建的,使用 DB4O 数据库进行数据存储。这是相当有效的并且表现良好。
新版本将基于 Linux,使用 Python(或者可能是 Erlang)和......是的!什么是合适的存储候选?
我在想 MongoDB,将每个样本(或者实际上是一堆样本)存储为 BSON 对象。每个样本(块)都会有一个样本计数器作为关键(索引)字段,以及一个信号源标识。
关键是我必须能够非常快速地检索样本。请求时,必须使用采样计数器范围和请求的信号源在不到一秒的时间内检索多达 30 秒的数据。当前的 (C#/DB4O) 版本管理这个 OK,在 100 毫秒内检索数据。
我知道 Python 在性能方面可能并不理想,但我们稍后会看到。
系统(“服务器”)将连接多个采集客户端,因此架构必须具有良好的扩展性。
编辑: 经过进一步研究,我可能会使用 HDF5 获取示例数据,使用 Couch 或 Mongo 获取更多类似文档的信息。我会及时通知你。
编辑: 最终的解决方案是基于 HDF5 和 CouchDB。它执行得很好,用 Python 实现,在 Raspberry Pi 上运行。
【问题讨论】:
-
您选择 PostgreSQL 的任何具体原因?
-
Postgres 是可扩展的,专为速度而设计。此外,您的数据似乎已经足够固定,因此 mongodb 在该领域并没有给您带来太多优势,并且在速度上输给了 pg。
-
另外,如果你想使用 Python,可以考虑 SQLAlchemy。
标签: python linux storage hdf5 data-acquisition