我们使用Postgres进行分析(星型模式)。 每隔几秒钟,我们会收到大约500个度量类型的报告。 最简单的架构是:
timestamp metric_type value
78930890 FOO 80.9
78930890 ZOO 20
我们的数据库管理员提出了一个建议,将所有相同5秒钟内的报告整合成一个:
timestamp metric1 metric2 ... metric500
78930890 90.9 20 ...
一些开发人员反对这种做法,认为这会增加开发的复杂性(批处理数据以便一次写入),并且会影响可维护性(仅查看表或添加字段更加复杂)。
在这样的系统中,DBA模型是标准实践吗?还是只有在原始模型明显不够可伸缩时才采用DBA模型?
编辑:最终目标是为用户绘制折线图。因此,查询大多数情况下将选择几个指标,按小时折叠,并选择每小时的最小值/最大值/平均值(或任何其他时间段)。
编辑:DBA的论点如下:
1.从第一天开始就很重要(见下文),但即使不是这样,系统最终也需要执行此操作,并且从另一个架构迁移将非常麻烦。
2.将行数减少500倍将允许更有效的索引和内存使用(在进行此优化之前,表将包含数亿行)。
3.当选择多个指标时,建议的架构将允许一次遍历数据而不是为每个指标选择单独的查询(或一些复杂的OR和GroupBY组合)。
编辑:500个指标是“上限”,但实际上大多数情况下,每5秒只报告约40个指标(尽管不是同样的40个)。