【发布时间】:2013-11-10 20:09:37
【问题描述】:
我们使用 Postgres 进行分析(星型模式)。 每隔几秒钟,我们就会收到大约 500 种指标类型的报告。 最简单的模式是:
timestamp metric_type value
78930890 FOO 80.9
78930890 ZOO 20
我们的 DBA 提出了一个建议,将相同 5 秒的所有报告扁平化为:
timestamp metric1 metric2 ... metric500
78930890 90.9 20 ...
一些开发人员反驳说这增加了开发的巨大复杂性(批处理数据以便一次性编写)和可维护性(仅查看表格或添加字段更复杂)。
DBA 模型是此类系统中的标准做法,还是仅在原始模型明显不够可扩展时才采取的最后手段?
编辑:最终目标是为用户绘制折线图。所以查询主要是选择几个指标,按小时折叠它们,然后选择每小时(或任何其他时间段)的最小/最大/平均。
编辑:DBA 参数是:
这与第 1 天相关(见下文),但即使这不是系统最终需要做的事情,从另一个架构迁移也会很痛苦
将行数减少 500 倍将允许更高效的索引和内存(在此优化之前该表将包含数亿行)
When selecting multiple metrics the suggested schema will allow one pass over the data instead of separate query for each metric (or some complex combinations of OR and GroupBY)
编辑:500 个指标是“上限”,但实际上大多数时候每 5 秒只报告约 40 个指标(虽然不是相同的 40 个)
【问题讨论】:
-
对模式的查询有什么作用?他们需要做多少工作才能在相同的时间戳上相互比较指标值?
-
你的 DBA 对这种(过早的)非规范化的论点是......?
-
你DBA是在提倡500列?这似乎……对于 DBA 来说是不寻常的。
-
all - 查看刚刚编辑的详细信息
标签: postgresql analytics time-series star-schema