当前位置:首页 > 问答 > 正文

TP系统落地那些事儿,聊聊用SQL SERVER搞智能化应用的点滴经验

说到TP系统,其实就是咱们平时在公司里天天打交道的那些业务系统,比如财务软件、订单管理系统、库存管理系统这些,它们的特点就是处理一笔一笔的交易,要求速度快、数据准,不能出错,我们公司前两年就折腾着把一套老旧的TP系统给升级了,数据库用的就是SQL Server,在这个过程中,我们摸索着加入了一些“智能化”的玩意儿,虽然不是什么高大上的人工智能,但也确实让系统变得“聪明”了不少,省了很多人力,我就聊聊这里面的点滴经验。

TP系统落地那些事儿,聊聊用SQL SERVER搞智能化应用的点滴经验

最开始,我们根本没想什么智能化,目标就是把旧系统的数据平平稳稳地迁到新的SQL Server上,保证业务不停摆,这个过程就挺考验人的,最大的教训就是,“索引不是越多越好”,我们一开始怕查询慢,把很多字段都建了索引,结果发现,数据量一大,插入、更新新订单的速度反而像老牛拉车,后来才明白,索引就像书本的目录,目录太细了,更新书的内容时改目录也得花不少时间,我们通过SQL Server自带的“数据库引擎优化顾问”跑了一下,删掉了一堆根本用不上或者效果不明显的索引,性能立马就上来了,这是我们从传统TP系统维护中学到的第一课:基础不牢,地动山摇,智能化得建立在稳定高效的数据库基础上。

TP系统落地那些事儿,聊聊用SQL SERVER搞智能化应用的点滴经验

等系统跑顺了,我们才开始琢磨智能化的事儿,最先做的,也是最实用的,就是“自动预警”,这事儿灵感来源于一次小事故,有批重要订单因为库存突然不足卡住了,等发现的时候已经耽误了半天,我们就想,能不能让系统自己发现问题然后“喊”我们?我们用SQL Server的“作业”功能配合“存储过程”实现了这个想法,就是写一个SQL脚本,定时去查库存量,一旦发现某个商品的库存低于我们设定的安全线,就自动发一封邮件给采购和仓库的负责人,这个脚本的逻辑不复杂,如果………”的判断,但就这么一个小功能,一下子就把被动处理问题变成了主动预防,再也没因为库存不足耽误过事,这让我们意识到,智能化不一定非要很复杂,能解决实际痛点的就是好智能

尝到甜头后,我们的步子就迈得大了一点,想试试“预测性”的东西,我们想预测一下未来一周哪些商品可能会卖得比较好,方便仓库提前备货,这可就不是简单的“……”了,需要分析历史销售数据,我们一开始想得很复杂,觉得非得用专门的Python或者机器学习工具不可,但后来发现,SQL Server自己就带了不少数据分析的“家伙事儿”,我们用了“窗口函数”来分析销售趋势,比如计算每个商品每周的销售移动平均线,看销量是在上升还是下降,虽然这比不上专业的预测模型精准,但对我们这种季节性波动比较明显的业务来说,已经能看出个大概趋势了,仓库的同事根据这个简单的趋势报告来备货,缺货率又降低了一截,这个过程告诉我们,在考虑引入外部复杂技术之前,先把手头数据库工具的性能榨干,往往能事半功倍

路上也踩过坑,我们曾想实时分析用户的操作行为,看看有没有什么异常,想法很好,但在TP系统的主数据库上直接跑复杂的分析查询,有时候会把CPU一下子拉满,反而影响了正常下单的速度,后来我们学乖了,“交易”和“分析”最好能分开,我们用了SQL Server的“复制”功能,专门弄了一个只读的数据库副本来做这些分析查询,这样就互不干扰了,这也算是个重要经验:智能化应用不能影响核心业务的稳定性,得找个稳妥的方式“悄悄”进行

用SQL Server搞TP系统的智能化,我们的体会是:别贪大求全,从最疼的点入手;充分利用数据库自带的功能,它们往往比想象中强大;最重要的是,一切要以保证核心交易稳定可靠为前提,我们现在也还在摸索,比如下一步想试试SQL Server和Power BI更深入地结合,做出更直观的数据看板,这条路还长着呢,但每解决一个小问题,看到系统能更“聪明”地帮到业务部门,就觉得挺有成就感的。

TP系统落地那些事儿,聊聊用SQL SERVER搞智能化应用的点滴经验