【问题标题】:What is a good storage candidate for soft-realtime data acquisition under Linux?什么是 Linux 下软实时数据采集的好存储候选?
【发布时间】: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


【解决方案1】:

你可以看看使用HDF5 ...它是为流数据设计的,允许时间索引搜索并且(据我所知)在 Python 中得到很好的支持

【讨论】:

  • 谢谢!那真的很有帮助!现在检查一下。它似乎完全符合我的要求。
  • 我将使用 HDF5。谢谢!
【解决方案2】:

使用您描述的键,您应该能够在必要时通过分片进行扩展。 120kB / 30sec 不算多,所以我认为你不需要太早分片。

如果您将其与仅使用文件进行比较,您将获得更复杂的查询并内置复制以实现高可用性、DS 或离线处理(Map Reduce 等)。

【讨论】:

    【解决方案3】:

    在您的情况下,您可以只创建 15 个文件并将每个样本按顺序保存到相应的文件中。这将确保请求的样本连续存储在磁盘上,从而减少读取时的磁盘寻道次数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      相关资源
      最近更新 更多