春节之前大家一起优化了用户点击数的增量如何写入数据库的问题。
今天中午吃饭,对此颇有感触。
我们增加visit count的算法,其实是每个厨师都会用的的办法,所以这篇blog叫做cook visit count
算法是这样的:
在一段时间内,被访问过的人有很多,他们可以按照被访问次数归类为,1次2次3次……
对这不同的次数分别执行数据库操作就可以节约很多资源。
进一步,我们对1 2 3这些次数也进行优化,先将被访问2次和3次的所有人都+2,再将被访问1次和3次的人都+1,于是本来需要至多n(n+1)/2次的数据库操作,优化为ln(n)/ln(2)的次数。
厨师的做法是这样的:
在吃饭的人很多的时候,根据顾客点菜的热点顺序,而不是先后顺序炒菜。
一次炒一盘和一次炒两盘,对于资源的消耗是相似的,这点和数据库操作很类似。
然而通过合并,可以节约资源,同时能够提高服务的质量,让后点菜的客人尽快吃到菜。
