【问题标题】:Most efficient way to store a large amount of data in a database在数据库中存储大量数据的最有效方法
【发布时间】:2016-06-17 21:26:38
【问题描述】:

在我当前的应用程序中,我每秒将接收超过 2000 帧,每帧包含 1024(通道)*32 位数据。我需要一种将它们存储在数据库或 CSV 文件中的方法。该应用程序不会全天运行,一年 365 天。唯一的目的是测试一些集成电路(可能会运行几分钟)。

我目前正在使用 QT 框架来显示数据,但它也具有数据库功能。也许使用 qt + sqlite...

如何处理此类问题?我应该做一个列= 1(帧号)+ NUMBER OF CHANNEL,并且行数与帧数一样多的表吗?我应该简单地做一个列= 1(帧号)+ 1(通道号)+ 1 通道值的表吗?

写入 CSV 文件会更快更高效吗?我花时间写数据的时间越多(无论是在 CSV 中,还是通过与数据库的交互),图的滞后就越大。我试图保持这个简单,但仍然有效。 (避免多线程、信号量和互斥体)。我有一些实时限制,图表需要是实时的。每 X 帧(可能每 25 帧)图表都会更新,但在每次数据输入时,我都需要将其记录到某个文件或数据库中。

【问题讨论】:

  • 您真的需要以编程方式实时交互/显示您的数据吗?听起来您正在尝试获取一些快速数据并对输出进行一些可视化。我推荐一个简单的 CSV 文件,然后您可以将其注入 Microsoft Excel。从那里您可以获得过滤/操作/显示数据所需的所有类似 DB 的功能,而无需为您的测试编写一次性解决方案。这是编写文件的快速/肮脏示例。 [forum.qt.io/topic/16586/how-to-write-csv-file-in-qt/2][1]
  • 我真的需要实时显示,因为测试的设备是一些传感器,当我们与之交互时,我们可以直接看到发生了什么。十 我需要记录数据,以便进一步分析。使用热图(如图形)可视化数据,其中值是颜色,通道是垂直的,帧数是水平的
  • 最快的方法是以二进制格式将帧流式传输到日志文件。然后你需要以大约 8 Mb/s 的速度写入,即使使用 HDD 看起来也不错。
  • 您是否还可以记录您在“与之交互”时所做的事情,以便在后期处理期间同时显示输入和输出?如果没有,向日志数据添加时间戳很有用。由于您的帧率如此之高,只需在文件顶部添加时间戳(或将时间戳放在文件名中),您就可以使用您的采样率计算 CSV 记录中每一帧的时间值。
  • 数据直​​接通过 UDP 流式传输(所以是二进制而不是字符串格式),速度非常快。你在说什么类型的日志? CSV?数据库?文本文件?

标签: c++ database qt optimization


【解决方案1】:

如果您需要数据流的实时可视化,但不确定如何实现互斥锁或如何表示您的数据,我认为您需要更多地依赖第三方工具。我建议使用单个 CSV 文件/通道写入数据,然后在其他地方显示。 Microsoft Excel 在过滤/显示数据方面非常强大,将 CSV 文件导入其中很简单。您还可以将图表链接到文件并手动更新输出,但您不会获得您要求的 ~80Hz 刷新率......更像是 1/60 赫兹。

我在 Google 上进行了快速搜索,发现这个实时图表工具似乎可以满足您的需求。您的 QT 应用程序可以编写 CSV 文件并定期保存,并且 live-graph 可以显示它。

live-graph

【讨论】:

    猜你喜欢
    • 2021-08-19
    • 2014-02-18
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多