四海内皆兄弟

数据库与动态规划

    前几天在处理一个具体问题时候,我被问到有个需求查活跃用户。比如一个月内登录过,或者一年内登录过。(这个时间可以自己定义,有些平台可能按周算,比如腾讯。也有些平台按照年算。这个都可以商量)。那么判断用户登录的依据就是数据库中用户登录日志。也只有这样获取我认为才是最为合理的。至于通过文本文件解析(开发工作量大不说,还不能进行比较和运算,为什么要比较,我们随后说)。通过hadoop就更加不可取了,实时性没有保障,而且开发难度更大。

    我们还是回到数据库上说,有人提议说就把一年以前登录的用户排除掉。我说万万不可取啊。为什么?假如有10年的数据,排除9年这个运算量还是很大的。不少迷信大数据的人这时候依然会说用大数据的方式,其实完全不用。我提出的是select max(time),用户代码 from 登录日志表 时间我取最后一个月。那么最后一个月都登录过,我管你前面11个月是不是登录过呢?当然这是一个非常粗略的解法,还有很多细节需要讨论。只是我这个想法给了大家一点启示。我们算法博士说我这种做法叫做动态规划。

   我去查了一下,动态规划是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产、军事以及自动化控制等领域,并在背包问题、生产经营问题、资金管理问题、资源分配问题、最短路径问题和复杂系统可靠性问题等中取得了显著的效果。

    我想了一下我日常的优化大多数都是属于这一类,想起了亮剑中李云龙说的:“原来我也是这样干的,只是还不知道有这种线状本。”

Image

    我不是算法出身,不知道原来自己做的很多有很强的理论,看来以后还是要补短板,多学习。理论和实际相结合。

   今年有一个15万倍的SQL优化,其实就是用到了部分的动态规划的思想。说的这里可以明白了,为什么不需要大数据了吧?。我一直说数据库底层就是物理学和数学,这次再次证明,数据库和数学紧密结合是多么有意义。数据库和物理学结合就是一体机了。看今天信通院发文准备做一体机的标准了,其实一体机这个领域还是Oracle玩的最好,已经把计算机的发挥到了极致。

Image