如题如何高效的按照时间统计,文章在每个月的发表数量.
1
owenliang 2018-02-01 08:57:59 +08:00 via Android
发布一篇文章,就重算该月所有文章数量,更新数字。
|
3
CEBBCAT 2018-02-01 09:29:38 +08:00 via Android
有数据库了是吗?那就添加一条递增记录呗,ID 相减再加一即为总数
|
4
owenliang 2018-02-01 10:00:48 +08:00 1
@zzlhr
1 )建归档表存每个月数量:month count。 2 )建事件表用于触发更新:month。 流程: 在线部分: 1 )增加 /删除文章,先插入一条事件记录:(2018 年 2 月份);若该步骤失败(数据库异常等),则中止后续流程,这叫做 WAL ( write ahead log )。 2 )对文章表的各种操作... 离线部分: 1 )取事件表中的一批记录(比如 100 条)到内存,按 month 去重,通常来说只会剩下一个 month,因为发布的新文章都是当月的。 2 )对于去重后的每个 month,去文章表执行 select count group by month,得到数量后更新到归档表对应 month 中。 3 )删除已经处理的事件。 该方案考虑了几个点: 1 )文章并发新建 /删除,实时更新归档表存在老覆盖新的并发问题,所以选择走 WAL 事件异步串行化。 2 )离线计算批量,解决文章并发量大,重复 count 的性能问题,因为基本上新文章都是当月的,可以批处理为 1 次 SQL 运算。 3 )若上述串行离线处理方案存在瓶颈,建议换消息队列,按 month 分区,多消费者并行。 |