gpt4 book ai didi

database - 存储时间序列数据,关系型还是非关系型?

转载 作者:太空狗 更新时间:2023-10-30 01:36:49 25 4
gpt4 key购买 nike

我正在创建一个系统,该系统使用 SNMP 以(可能)5 分钟的间隔轮询设备的不同指标数据,例如 CPU 利用率、磁盘利用率、温度等。最终目标是以时间序列图的形式向系统用户提供可视化。

我过去考虑过使用 RRDTool,但拒绝了它,因为无限期地存储捕获的数据对我的项目很重要,而且我想要更高级别和更灵活地访问捕获的数据。所以我的问题是:

关系数据库(如 MySQL 或 PostgreSQL)或非关系数据库或 NoSQL 数据库(如 MongoDB 或 Redis)在查询数据以作图时的性能更好。

关系

给定一个关系数据库,我会使用一个 data_instances 表,其中将存储为所有设备测量的每个指标捕获的每个数据实例,具有以下字段:

字段:id fk_to_device fk_to_metric metric_value timestamp

当我想为特定设备上的特定指标绘制图表时,我必须查询这个单一表过滤掉其他设备,以及针对该设备分析的其他指标:

SELECT metric_value, timestamp FROM data_instances
WHERE fk_to_device=1 AND fk_to_metric=2

此表中的行数为:

d * m_d * f * t

其中 d设备的数量,m_d 是所有记录的累积指标数量设备,f 是轮询数据的频率t 是系统时间 的总量一直在收集数据。

如果用户在一年内每 5 分钟记录 3 台设备的 10 个指标,我们将拥有不到 500 万 记录。

索引

如果没有 fk_to_devicefk_to_metric 上的索引,扫描这个不断扩展的表将花费太多时间。因此,需要为上述字段和 timestamp(用于创建具有本地化周期的图表)编制索引。

非关系型 (NoSQL)

MongoDB 具有集合 的概念,与表不同,这些表可以通过编程方式创建而无需设置。有了这些,我可以为每个设备划分数据存储,甚至为每个设备记录的每个指标。

我没有使用 NoSQL 的经验,也不知道它们是否提供任何查询性能增强功能,例如索引,但是上一段建议在 NoSQL 下存储数据的结构中执行大部分传统关系查询工作。

未定

具有正确索引的关系解决方案是否会在一年内减少爬行?或者 NoSQL 方法的基于集合的结构(这符合我对存储数据的心智模型)是否提供了显着的好处?

最佳答案

绝对是关系型的。无限的灵 active 和扩展性。

在概念和应用方面进行了两次更正,然后进行了提升。

更正

  1. 不是“过滤掉不需要的数据”;它只选择需要的数据。是的,当然,如果你有一个Index来支持WHERE子句中标识的列,那是非常快的,而且查询不依赖于表的大小(从160亿行的表中抓取1000行是瞬时的) .

  2. 您的 table 有一个严重的障碍。根据您的描述,实际 PK 是(设备、指标、日期时间)。 (请不要称它为 TimeStamp,它有其他含义,但这是一个小问题。) 的唯一性由以下内容标识:

       (Device, Metric, DateTime)
    • Id 列什么都不做,完全是多余的。

      • Id 列永远不是键(关系数据库中禁止的重复行,必须通过其他方式防止)。
      • Id 列需要一个额外的索引,这显然会影响INSERT/DELETE 的速度,并增加磁盘空间的使用。

      • 你可以摆脱它。请。

高度

  1. 现在您已经移除了障碍,您可能没有认出它,但您的表格是第六范式。速度非常快,PK上只有一个Index。为了理解,请阅读 this answer什么是第六范式?开始。

    • (我只有一个索引,没有三个;在非 SQL 上你可能需要三个索引)。

    • 我有完全相同的表(当然没有 Id“键”)。我有一个附加列 Server。我远程支持多个客户。

      (服务器、设备、指标、日期时间)

    该表可用于使用完全相同的 SQL 代码(是的,切换单元格)。我使用该表为客户建立了无限多样的图形和图表,以了解他们的服务器性能。

    • Monitor Statistics Data Model .
      (内联太大;有些浏览器无法内联加载;点击链接。也是过时的演示版本,出于显而易见的原因,我无法向您展示商业产品 DM。)

    • 它允许我生成 Charts Like This ,使用单个 SELECT 命令从客户那里收到原始监控统计文件后,按了六次击键。注意混合搭配;操作系统和服务器在同一个图表上;各种枢轴。当然,统计矩阵的数量没有限制,因此图表也没有限制。 (在客户的许可下使用。)

    • 不熟悉关系数据库建模标准的读者可能会发现 IDEF1X Notation有帮助。

还有一件事

最后但同样重要的是,SQL 是 IEC/ISO/ANSI 标准。免费软件实际上是非 SQL;如果他们不提供标准,则使用术语 SQL 是欺诈性的。他们可能会提供“额外服务”,但他们缺乏基础知识。

关于database - 存储时间序列数据,关系型还是非关系型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4814167/

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