我们使用 Postgres 进行分析(星型模式)。每隔几秒钟,我们就会收到大约 500 种指标类型的报告。最简单的模式是:
timestamp metric_type value
78930890 FOO 80.9
78930890 ZOO 20
Run Code Online (Sandbox Code Playgroud)
我们的 DBA 提出了一个建议,将所有相同 5 秒的报告展平为:
timestamp metric1 metric2 ... metric500
78930890 90.9 20 ...
Run Code Online (Sandbox Code Playgroud)
一些开发人员反驳这种说法,称这增加了开发的巨大复杂性(批处理数据,以便一次性编写)和可维护性(仅查看表或添加字段更复杂)。
DBA 模型是此类系统中的标准做法还是仅在原始模型显然不够可扩展时的最后手段?
编辑:最终目标是为用户绘制折线图。因此,查询主要是选择几个指标,按小时/分钟折叠它们,然后选择每小时(或任何其他时间段)的最小值/最大值/平均值。
编辑:DBA 的主要论点是将行数减少 x500 次将允许更高效的索引和内存(在此优化之前,该表将包含数亿行)。然后在选择多个度量标准时,建议的架构将允许一个通过数据而不是每个度量的单独索引搜索。
编辑:500 个指标是一个“上限”,但实际上大部分时间每 5 秒只报告约 40 个指标(虽然不是相同的 40)