【发布时间】:2021-12-27 08:03:02
【问题描述】:
为简化起见,我们运营一个广告网络并有 2 个表格:
-
广告系列(列:id、状态) 状态可以是活动的或非活动的,每周有 10 万个新条目,95 % 的条目在 72 小时内变为“非活动”状态
-
点击次数(列:id、campaign_id、created_time) 与广告系列相关的点击列表。每周 1 mio 新条目
99 % 的查询与“有效”广告系列和过去 30 天的点击次数有关。超过 30 天的无效活动和点击仅用于某些统计查询。 2 年后,campaigns 表中有 10 个 mio 条目,clicks 表中有 100 个 mio 条目,虽然在大多数查询中只使用了一小部分,但我怀疑这是非常低效的。
解决方案:
- 创建一个表“inactive_campaigns”和“inactive_clicks”,并定期将“旧”数据移到那里
- 在每个表上创建一个分区以将“旧数据”移到那里
- 坚持使用campaigns.status 和clicks.created_time 上的索引
我是否忘记了更好的解决方案? 这些解决方案中哪一个是最佳编码实践,为什么? 1) 和 2) 的速度有区别吗?
谢谢!
【问题讨论】:
-
只是一个意见。选项 1 似乎是您的最佳解决方案。将历史数据移动到单独的表中是一种简单的方法。只要用户可以忍受必须在其他表中查询旧数据。您可以使用旧数据对表进行分区