自己曾经做过一个网盘项目。刚开始由于需要快速地从0到1建设上线,所以没有对核心文档表进行分表。当然我的架构理念也是“按需架构设计”。产品需求在没有明确的长远计划的情况下以“小步快跑,赶超竞品”为主。后期由于产品功能触达目标用户群需求点、产品用户体验不断提升、产品多方位导流、加强产品推广文档表每天有百万数据增长量。不得不对文档表进行按用户id分表。当时产品功能已全覆盖文档的生命周期。产品功能已丰富多彩。修改所有关联文档表的业务代码为按用户id分表开发测试成本非常高。上线后线上问题不可控。经过考虑在业务代码最底层DB层进行SQL语句解析来进行用户id分表处理。这样的话开发测试成本都非常低。上线后有问题方便回滚和追查原因。
今天为大家介绍Python/PHP两种MySQL语句解析器。当时网盘项目用的是PHP编程语言开发。
Python的SQL语句解析器 。个人推荐使用moz_sql_parser库。经调研官方的sqlparse库解析出来的语句段无法满足需求也很难理解。
1、Python moz_sql_parser库安装
2、Python moz_sql_parser SQL语句解析
3、Python moz_sql_parser总结
PHP的SQL语句解析器。 个人推荐使用PhpMyAdmin的sql-parser组件。PhpMyAdmin是经过 历史 检验可信赖的。
1、PHP PhpMyAdmin/sql-parser安装
2、PHP PhpMyAdmin/sql-parser SQL语句解析
3、PHP PhpMyAdmin/sql-parser总结
大家有什么问题可以发评论沟通。
declare done int default 0//定义一个DONE为默认值为0的INT类型declare curs cursor for select up_client,partner,operation_date from t_client_his_tmp//定义一个名为curs的select up_client,partner,operation_date from t_client_his_tmp游标
declare continue handler for SQLSTATE '02000' set done = 1//这句定义一个CONTINUE的handler 并将done的值赋1
open curs//打开游标
repeat//游标重复开始
fetch curs into m_client,m_partner,m_date//取第一个up_client,partner,operation_date 对应为m_client,m_partner,m_date
if not done then //不晓得了
if exists (select up_client from t_client_oplog where up_client=m_client) then //如果存在则更新
update t_client_oplog set operation_count=operation_count+1 where up_client=m_client
else //不存在则插入
insert into t_client_oplog(up_client,operation_count,first_created,partner,isfinished)
values(m_client,1,m_date,m_partner,'0')
end if//结束EXITS
end if//结束if not done
until done
end repeat//结束循环
close curs//关闭游标
我用的是MSSql
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)