2009-09-06 84 views
2

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

我不介意使用VC++进行构建,但适用于C#的想法是理想的。

+0

每秒1000个数据采样,但是多少秒? – 2009-09-06 11:03:03

+0

认为“永远”!我的客户说我真的无法控制这个参数。 – 2009-09-06 11:16:05

回答

2

如果没有更多的信息,比如说什么来源,你需要查询存储的数据等等,很难说。

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

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

我不知道你需要多少CPU时间来收集每个样本;以及如何在指定的时间读取每个样本的时间关键(它们是否会被缓存在您读取的设备中?)。如果采样对时间要求很高,则每个采样需要1 ms;那么你可能无法负担垃圾收集器踢的风险,因为它会阻塞你的线程一段时间。在这种情况下,我会采取非托管方式。

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

2

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

Kx是受欢迎的选择,因为是Fame