分析sqltoy-orm的价值和场景思考(远比mybatis强大的sqltoy)

原创
2020/04/08 13:19
阅读数 3.2K

sqltoy开源地址: https://github.com/sagframe/sagacity-sqltoy

sqltoy gitee地址: https://gitee.com/sagacity/sagacity-sqltoy

在此之前写了一篇列举sqltoy远比mybatis强大的十几条特点,基本上采取了严谨的举证模式。

具体参见:为什么说sqltoy-orm远比mybatis强大 https://www.oschina.net/news/114671/sqltoy-orm-vs-mybatis#comments

很多人说我就坚持mybatis,其实并没有关系,写文章不在于强迫谁去选择,而是互通有无的分享或者说是研发人员的自我虚荣的一种表达!

sqltoy的发展起初并不是因为技术,而是服务于项目管理,所以说sqltoy宣扬的不是硬派的技术,而是独特的思考和见解。sqltoy的宗旨是希望给大家提供一个可靠的功能完备的orm框架,最终可以让大家可以忽略orm,从而腾出精力硬扛其他领域!免得各种精力牵制被吊打!

sqltoy几乎每个创新后面都有有趣和心酸的故事,应该可以问:究竟经历啥可以整理出这么多符合场景的功能!

  • sql的写法:很多人不理解,总想着java代码里面类似jooq式的耍酷,简单的是可以,但涉及2张以上表查询时,你是需要从客户端调试的,后期维护时极为不方便,而且sql对于很多产品、测试、运维都熟悉,便于优化、调试、变更、维护、沟通!你jooq里面左一个and又一个or的java代码后期修改维护就是梦魇呀!sql谁不会呢?另外mybatis的sql写法因为xml逻辑判断打乱了sql的原本结构也是不便于阅读和后期维护的。

     sqltoy的起点就是因为这个优雅的sql写法,当初因为项目特点查询功能比较多,查询功能中查询条件也比较多,查询条件还总要求增加调整,查询结果也要调整。开发苦不堪言!每次调整都需要从代码里面扣出来放到客户端验证呀,验证完还得反写到代码里面,当时就在想有没有办法将代码中的sql跟客户端基本保持一致,而且还可以保留注释。这样开发、调试、维护就基本统一了!比较偶然的机会总结出目前sqltoy的sql写法,效果非常明显!你看是不是基本保持了跟客户端一致?

  • 唯一性验证:客户名称或代码、手机号、邮箱唯一性验证场景里面要吧?
  • 取随机记录: 抽样或考试、问卷等场景要吧?
  • 取top记录:取排名要吧?
  • updateFetch:资金帐、库存台账等极高事务要求的场景要吧?原来是load(entity,LockMode),取回锁住再更新,两次交互。
  • treeTableWrapper:树形结构表处理场景也不少吧?
  • 缓存翻译:在索引、分区表、甚至分库分表手段用尽时,来一个缓存翻译性能又可以大幅提升一次!

    这个是在上海一家银行:我们接手一个项目重构,当时的系统里面的统计报表是晚上下班时点,第二天出早上上班出结果!重构的原因就是慢!

    大量的关联查询、大量查询全部基于原生表或者做业务时一点没有为统计考虑做适度的数据规整,公司跟客户签的合同对数据统计的标准是2年规模数据50个并发最慢不得超过20秒!绞尽脑汁呀,数据ETL+缓存翻译 最终基本上在3~5秒左右!

  • 分页优化:传统的分页仅仅实现了分页而并没有针对分页进行优化

    一个公司的ERP订单查询统计:是分页显示订单的执行情况,订单有出入库、收付款情况,很慢原因是按照查询条件全量做了相关的关联统计,一个查询基本上几分钟,客户怨言很大,直接投诉说你们公司开发水平太差!

    我去协调处理,客户一脸不信任呀!你们公司太差水平太差!当晚想出了快速分页,连夜干到凌晨5点,第二天应用起来了,一试6秒左右!客户露出了赞同的眼光!

  • 行列转换:交叉报表时需要吧?

    1、最早是因为一个项目中需要按选择的月份范围展示数据,开发一个月一个月的去查询组合,我批评了一下他一脸无辜用那很委屈的小眼神看着我!

    2、山东一家银行的项目:多维度的交叉选择,太复杂了,开发直接撂挑子天天要回家。

    当然这个行列转换功能在我们自己的报表平台里面已经集成了,就是规避这种苦哈哈的场景发生!

  • 分组汇总求平均:统计时要不要?我会写sql?多层次的呢?写出来那么长还香吗?
  • 环比计算:是拿到代码里面苦哈哈的算吗?
  • 分库分表:在超大规模数据场景下分库分表是一个很好的选择
  • elasticsearch\clickhouse: 在超大规模数据时想用传统数据库来解决问题会有极大的挑战,而es经过实践十亿级的数据仍然可以20毫秒左右!
  • sql文件更新检测:开发时你不希望改一下就需要热重启一下吧?
  • 超时sql打印:便于整理慢查询

写在最后:工作生活不要有太多不开心,sqltoy让我经历了无数艰难的时刻也体验了很多眼前一亮的兴奋,愿sqltoy同样可以帮助到大家。

世界没有永恒的东西,mybatis将成为过去,当然sqltoy最终也将成为过去!

展开阅读全文
加载中

作者的其它热门文章

打赏
0
1 收藏
分享
打赏
0 评论
1 收藏
0
分享
返回顶部
顶部