存储时间序列数据,是关系数据还是非关系数据?
我正在创建一个系统,该系统使用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方法的基于集合的结构(与我对存储数据的思维模型匹配)提供了明显的好处?