关于解决MYSQL的like模糊查询效率的一种方案

大家都知道like %suibin% 这种查询的效率极低,而MYSQL也建议不要这样模糊查询,常用的是把数据同步到CACHE里:

1、比如同步到ES里用ES模糊查询。或者同步数据到MongoDB实现模糊查询。这样需要写SQL还需要再写一套语法通过判断切换,还要写一个数据库同步表数据的逻辑。

2、其实我们可以把以上的架构设计进行改进,我就花了2周多做一个mybatis插件实现,那么在组件内部实现了同步数据和查询切换。这样开发人员不需要去关心实现上述代码。下面一个方案,当然该方案里spring-jdbc,spring-tx,mybatis三者底层代码修改,在TX对@Transactional的处理逻辑里进行拦截事务,对CURD中的CUD和R分为俩组处理,CUD进入队列和并发锁处理,采用生产消费者模式实现数据同步保证异构库表数据一致性;R的话从mongdb获取不存在时走MYSQL查询;当然关于俩种数据库的字段类型经过了映射处理,比如时区问题等。代码连接如下:

multdao.mybatis with mongodb cache 介绍

multdao.mybatis with mongodb cache 是后端扩展组件,是基于mybatis底层实现了CURD的分布式事务,不修改任何业务逻辑情况下,导入该组件即可实现数据的CURD实时同步到mysql和mongodb, 双库数据一致。它的作用在DAO层实现了mongodb作为数据cache,写的时候写双库,读的时候读mongodb。目前支持:mapper方式的sql。

  1. 不修改任何项目上的逻辑代码即可集成
  2. 添删改查同时操作mysql和mongodb
  3. 基于mybatis底层源码实现,也支持mybatis-plus
  4. 组件保证了分布式事务的问题,数据一致性
  5. 支持并发CURD,支持大数据量读写
  6. 实现了读写分离:读mongodb,写mysql
  7. 关系数据库支持:mysql,oracle.非关系数据库支持:mongodb
  8. 支持sql92规范的语法,支持复杂的join查询
  9. 支持事务注解@Transactional mysql innodb的事务。
  10. 支持like %dd% 的高性能查询,不用担心mysql负向查询效率问题。join和like的查询是走的是mongodb数据库。
  11. 不用加mysql索引提高效率问题。

https://gitee.com/firstime/community-src/tree/master/multdao.mybatis

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值