在开发实时记录输入信号(数字)的软件时,如何才能最好地存储和压缩这些数据?SQL引擎是否适合这种情况,允许在将来进行快速数据挖掘,或者是否有其他适合或压缩到足以每秒1000个数据样本的数据格式?
我不介意在VC++中构建,但是适用于C语言的思想是理想的。

最佳答案

如果没有更多的信息很难说,例如,什么是源,您是否需要查询存储的数据,等等。
但是对于1000个样本/秒,您应该考虑在内存中保留几秒钟的数据,然后将它们批量写入另一个线程上的持久存储。(建议使用多处理器机器)。
如果您决定通过托管语言执行此操作,请保留用于保存示例的相同数据结构,以便GC不需要太频繁地收集内存。通过使用指针和unsafe关键字(提供对内存结构的直接访问并消除数组的边界检查代码),可以获得稍好的性能。
我不知道你收集每个样本需要多少CPU时间;在指定的时间读取每个样本需要多少时间(它们会缓冲在你正在读取的设备中吗?)。如果采样是时间关键型的,则每个采样有1毫秒;然后您可能无法承担垃圾收集器介入的风险,因为它将阻塞您的线程一段时间。在这种情况下,我会采用非托管的方法。
SQL Server可以轻松地保存数据,也可以将数据写入文件。这主要取决于您以后需要如何处理数据。我不知道每个样本有多少数据,但假设是8字节。然后你有8000字节每秒的原始数据写-也许你有一些开销,所以可能是10 kb/s。我能想到的大多数存储机制将能够以这种速度写数据。只需确保写在另一个线程上,而不是一个正在进行采样的线程上。

10-01 02:20
查看更多