我正在构建一个数据采集系统。采集的数据通常由 15 个信号组成,每个信号以(比如说)500 Hz 的频率进行采样。也就是说,每秒大约 15 x 500 x 4 字节(有符号浮点数)将到达并且必须保持。
以前的版本是基于 .NET (C#) 构建的,使用 DB4O db 进行数据存储。这是相当有效的并且表现良好。
新版本将基于 Linux,使用 Python(或者可能是 Erlang)和......是的!什么是合适的存储候选?
我在想 MongoDB,将每个样本(或实际上是一堆)存储为 BSON 对象。每个样本(块)将有一个样本计数器作为关键(索引)字段,以及一个信号源标识。
问题是我必须能够很快地检索样本。请求时,必须使用采样计数器范围和请求的信号源在不到一秒的时间内检索多达 30 秒的数据。当前的 (C#/DB4O) 版本管理这个 OK,检索数据的时间远少于 100 毫秒。
我知道 Python 在性能方面可能并不理想,但我们稍后会看到。
系统(“服务器”)将连接多个采集客户端,因此架构必须具有良好的扩展性。
编辑: 经过进一步研究,我可能会使用 HDF5 获取示例数据,使用 Couch 或 Mongo 获取更多类似文档的信息。我会及时向大家发布。
编辑: 最终解决方案基于 HDF5 和 CouchDB。它执行得很好,用 Python 实现,在 Raspberry Pi 上运行。