存储时间序列数据,关系数据还是非数据?
我正在创建一个系统,使用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_device
和fk_to_metric
上的索引扫描这个不断扩展的表将花费太多时间。因此,索引上述字段以及timestamp
(用于创建具有本地化时段的图表)是必需的。
非关系(NoSQL)
MongoDB具有集合的概念,与表不同,这些可以在没有设置的情况下以编程方式创建。有了这些,我可以为每个设备划分数据存储,甚至为每个设备记录每个指标。
我没有使用NoSQL的经验,也不知道它们是否提供任何查询性能增强功能,例如索引,但前一段提出在数据存储在NoSQL下的结构中进行大多数传统的关系查询工作。
未定
具有正确索引的关系解决方案是否会在一年内减少爬行?或者NoSQL方法的基于集合的结构(与我存储的数据的心理模型相匹配)是否提供了明显的好处?
没有找到相关结果
已邀请:
10 个回复
桑娠贯涤
栏没有任何作用,它完全是完全冗余的。
列永远不是密钥(必须通过其他方式阻止在关系数据库中禁止的重复行)。
列需要一个额外的索引,这显然会阻止
的速度,并增加使用的磁盘空间。 你可以摆脱它。请。 海拔 既然你已经消除了障碍,你可能没有认出它,但你的桌子是第六范式。速度非常快,只有一个PK指数。要了解,请阅读什么是第六范式?向前走。 (我只有一个索引,而不是三个;在非SQL上你可能需要三个索引)。 我有完全相同的表(当然没有
“键”)。我有一个额外的列
。我远程支持多个客户。
该表可用于使用完全相同的SQL代码(是的,切换单元格)来旋转数据(即顶部的
和侧面的
,或者旋转)。我使用该表为客户建立无限种类的图形和图表,以提高其服务器性能。 监控统计数据模型。 (内联太大;有些浏览器无法加载内联;点击链接。也就是过时的演示版本,出于显而易见的原因,我无法向您展示商业产品DM。) 它允许我使用单个SELECT命令从客户接收原始监视统计文件后生成六个键击。注意混合搭配;操作系统和服务器在同一图表上;各种各样的Pivots。当然,统计矩阵的数量没有限制,因此图表也没有限制。 (与客户的许可一起使用。) 不熟悉关系数据库建模标准的读者可能会发现IDEF1X表示法很有帮助。 还有一件事 最后但并非最不重要的是,SQL是IEC / ISO / ANSI标准。免费软件实际上是非SQL的;如果他们不提供标准,则使用术语SQL是欺诈性的。他们可能提供“额外”,但他们缺乏基础知识。
完趣镐
纫合峭
筷啸够对铅
告耸
坍锭嘉韭蓝
贸会
蹄寄噬非芹
臀夯脖锑
念炯