gpt4 book ai didi

c++ - 用于快速浏览的时间和源相关日志数据的最佳数据结构?

转载 作者:搜寻专家 更新时间:2023-10-31 00:46:31 24 4
gpt4 key购买 nike

我有现场总线数据,这些数据以数据包的形式发送并包含来自源的数据(例如 float )。

=> 我得到带有源 ID 和值的时间戳。

现在我想创建一个小程序(实际上是 C++ 中的一个日志守护程序,它通过 HTTP 提供一个查询界面,用于在图表中显示数据),用户可以在其中选择一些来源和有趣的时间范围,以及然后获取绘制的数据。该守护进程将在基于 Linux 的嵌入式系统下运行。

所以我的问题是:该数据最有效(查询性能和内存消耗)的数据存储方案是什么?


附录 #1:

虽然我觉得这个算法问题很有趣,但我会提供一些关于导致这个问题的问题的信息:

  • 数据速率通常为 3 个数据包/秒(突发高达 30/s 通常)
  • 有趣的数据可能长达一个月(越多越好;该算法可能使用一个层次结构,允许超快速查找最后一天、快速查找上周和可接受的旧数据查找)
  • ID 为(目​​前)32 位宽。
  • 大约使用了 1000 个 ID - 但事先不知道是哪个 ID,用户可能随时使用其他 ID
  • 存储的值将具有不同的数据类型( bool 值、整数、 float - 甚至可以是 14 字节宽的字符串)

做一点数学:

  • 假设一个 32 位时间戳 + 32 位 ID + 32 位值平均将创建一个数据来存储 12 字节
  • 这将是一个月 12*3*60*60*24*30 = 大约 100 MB 的数据过滤槽(使用 500 MHz Geode CPU 实时)
  • 显示最后一天的图将过滤掉 1/30 的数据 - 这将留下 3 MB 来过滤。
  • 通过仅显示相关 ID,这 3 MB 将减少到 1/1000 (= 3 KB)。

附录#2:

这个问题基本上是问我如何将 2D 数据集(时间和 ID 是维度)传输到内存中(并从那里将其序列化到文件中)。约束条件是两个维度都将被过滤。

建议的时间排序数组是处理时间维度的明显解决方案。 (为了提高查询性能,可以使用基于树的索引。二分搜索本身并不容易,因为每个条目可能有不同的大小——但索引树很好地涵盖了这一点,并且基本上具有相同的基本思想)。

走那条路(首先是一个维度(时间),然后是另一个维度)将导致 ID 过滤性能不佳(我担心),因为我必须使用强力查找。

最佳答案

您可以将数据存储在 SQLite 中并让您的网络服务器对其运行 SQL 查询。使用现有工具,您可以快速制作原型(prototype)并查看其扩展性是否适合您的目的。

关于c++ - 用于快速浏览的时间和源相关日志数据的最佳数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5051500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com