2

When developing software that records input signals (numbers) in real time, how can this data be best stored and compressed? Would an SQL engine be good for this, permitting fast data mining in the future, or are there other data formats that would be suitable or compressed enough for upto 1000 data samples per second?

I don't mind building in VC++ but ideas applicable to C# would be ideal.

4

2 回答 2

2

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

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

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

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

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

于 2009-09-06T11:21:32.060 回答
2

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

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

于 2009-09-06T11:38:00.700 回答