【问题标题】:How to store and compress data for real time data logging?如何存储和压缩数据以进行实时数据记录?
【发布时间】:2010-11-26 00:04:42
【问题描述】:

在开发实时记录输入信号(数字)的软件时,如何最好地存储和压缩这些数据? SQL 引擎会对此有好处,允许未来进行快速数据挖掘,还是有其他适合或压缩到足以每秒处理多达 1000 个数据样本的数据格式?

我不介意在 VC++ 中构建,但适用于 C# 的想法将是理想的。

【问题讨论】:

  • 每秒 1000 个数据样本,但持续多少秒?
  • 想“永远”!我的客户说我真的无法控制那个参数。

标签: database input signals real-time


【解决方案1】:

很难说没有更多信息,例如来源是什么,您是否需要查询存储的数据等等。

但是对于 1000 个样本/秒,您应该考虑在内存中保存几秒钟的数据,然后将它们批量写入另一个线程的持久存储中。 (推荐使用多处理器机器)。

如果您决定通过托管语言执行此操作,请保留相同的数据结构以保存样本 - 这样 GC 就不需要太频繁地收集内存。通过使用指针和 unsafe 关键字(提供对内存结构的直接访问并消除数组的边界检查代码),您可以获得稍微更好的性能。

我不知道你收集每个样本需要多少 CPU 时间;以及在指定时间读取每个样本的时间紧迫性(它们会在您正在读取的设备中缓冲吗?)。如果采样是时间关键的,则每个样本有 1 毫秒;然后你可能无法承受垃圾收集器启动的风险,因为它会阻塞你的线程一段时间。在这种情况下,我会选择非托管方法。

SQL Server 可以轻松保存您的数据,或者您可以将它们写入文件。这主要取决于您以后需要对数据做什么。我不知道每个样本有多少数据,但我们假设它是 8 个字节。然后你每秒有 8000 字节来写入原始数据——也许你有一些开销,所以它可能是 10 kB/s。我能想到的大多数存储机制都能够以这种速度写入数据。只需确保写在另一个线程上,而不是在进行采样的线程上。

【讨论】:

    【解决方案2】:

    您可能希望查看时间序列数据库,而不是关系数据库。这些将被优化以处理您正在考虑的数据类型和使用情况。

    Kx 是一个受欢迎的选择,Fame 也是如此。

    【讨论】:

      猜你喜欢
      • 2013-08-03
      • 1970-01-01
      • 1970-01-01
      • 2015-05-05
      • 1970-01-01
      • 2020-08-25
      • 2016-07-15
      • 2012-11-03
      • 2011-05-09
      相关资源
      最近更新 更多