在开发实时记录输入信号(数字)的软件时,如何最好地存储和压缩这些数据? SQL引擎是否适合这种情况,允许将来进行快速数据挖掘,或者是否有其他适合或压缩的数据格式足以支持每秒多达1000个数据样本?
我不介意用VC ++构建,但适用于C#的想法是理想的。
答案 0 :(得分:2)
如果没有更多信息,很难说,例如,来源是什么,您需要查询存储的数据,等等。
但是对于1000个样本/秒,你应该看看在内存中保存几秒钟的数据,然后将它们批量写入另一个线程上的持久存储。 (建议使用多处理器机器。)
如果您决定通过托管语言执行此操作,请保留相同的数据结构以保留样本 - 以便GC不需要过于频繁地收集内存。通过使用指针和unsafe关键字(可以直接访问内存结构并消除数组的边界检查代码),可以获得略微提高的性能。
我不知道收集每个样本需要多少CPU时间;以及在指定时间读取每个样本的时间要求如何(它们是否会在您正在读取的设备中进行缓冲?)。如果采样对时间要求严格,则每个样本的采样时间为1 ms;然后你可能无法承担垃圾收集器的风险,因为它会阻塞你的线程一段时间。在这种情况下,我会选择一种不受管理的方法。
SQL Server可以轻松保存您的数据,或者您可以将它们写入文件。它主要取决于您以后需要对数据执行的操作。我不知道每个样本有多少数据,但我们假设它是8个字节。然后你有每秒8000字节来写入原始数据 - 也许你有一些开销,所以它可能是10 kB / s。我能想到的大多数存储机制都能够以这种速度写入数据。只要确保写入另一个线程而不是正在进行采样的线程。
答案 1 :(得分:2)