他非让我分表

分库分表初见

曾经为了面试,熟读并背诵了那么多骚操作,对于数据库这方面,常会背到的就是sql优化,分库分表了。

面试官 同学,当你sql查询 特别慢时怎么办呢? 加索引 加索引要注意些啥? 巴拉巴拉... 还是慢呢? 读写分离,分散压力 一致性问题呢? 巴拉巴拉... 数据量比较大,还是慢呢? 分库分表 具体说说 水平切分,垂直切分 按什么切分呢 时间切分,关键字段切分 有什么成熟方案吗? 阿里的TDDL 阿里的Cobar 360的Atlas 当当开源的Sharding-jdbc 基于 Cobar 改造的Mycat 你会选哪个呢? sharding-jdbc 为什么呢? 嗯...这名字挺好听的 面试官 bettal

当分表来临时

昨天一个戴眼镜的老哥告诉我

有一个表未来数据量会比较大,我准备给他切了,可能会影响你那边。

我去?飞来横祸?我这CRUD过的很开心,分什么表啊。为此赶紧调动我面试时背诵的各种知识点,跟老哥进行一场battle,渴望不分表,继续单表开开心心。可惜败下阵来,还是太年轻了。没办法,开始coding吧!

最开始想是直接引入sharding-jdbc,第一次操作,不得不说sharding-jdbc的文档真不怎么样,搞了半天总是报错,各种错,反正是没跑起来。于是乎,一个骚操作涌上心头。我这边对这个表的操作很简单,就是select,实在不行,直接改sql吧。我要是直接把

select * from table

改成

 select * from table0
 union 
 select * from table1 
 union....

那未来承接这个项目的同学可能会把我骂死,不过这个问题也好解决,三下五除二,把代码上的created by署名删除了,嗯!完美!
冷静三秒之后,觉得还是不要这么搞了,毕竟我是一个专业的软件工程师,担负着拯救人类的重任。算了,再想想招儿吧。
ORM用的是mybatis,于是乎一个想法涌上心头,mybatis不是有插件嘛,我直接来个统一处理完事了呗,不得不佩服自己的机智,很快搞了起来。

demo(地址附在文末)

talk is cheap,show me the code -----大师如此说道

mybatis插件其实就是拦截器,我们可以用申明签名的方式,指定我们要拦截的方法,从中获取我们需要的信息,加入自定义的逻辑操作。也就是说,它可以帮我们拦截sql,在sql提交给jdbc执行前的那一刻,将他拦截下来,判断他的分表策略和操作类型(demo中以注解的形式申明),然后进行sql处理(demo中使用的是druid的sql解析模块),整合出我们最终需要的sql。

当然了,这么典型的需求,肯定已经有人做好轮子等着我们去用了,就如上面对话中所提及的几个,比如其中的sharding-jdbc,做的就是帮我们拦截sql,解析sql,路由执行,结果聚合。这一切对于我们用户是透明的,我们无需改任何代码,只要加入sharding-jdbc的配置参数就可以开心的分库分表了,但考虑到各种原因,有些复杂sql是不支持的,这个可以参考官方文档。

这个demo记录了从单表操作到自定义分表插件到使用sharding-jdbc进行分表操作的全历程。demo只能演示select * from table这样简单语句的全套操作历程,但也足以体现整个思路。自定义插件完成分表对应的是demo中的version2分支。sharding-jdbc完成分表对应的是demo中的version3分支。

地址:https://github.com/naget/sharding

参考资料

  1. https://github.com/alibaba/druid/wiki/SQL-Parser
  2. https://mp.baomidou.com/guide/quick-start.html#%E6%B7%BB%E5%8A%A0%E4%BE%9D%E8%B5%96
  3. https://github.com/apache/incubator-shardingsphere/issues/1900
  4. https://mybatis.org/mybatis-3/zh/configuration.html#plugins
基于SSM框架的智能家政保洁预约系统,是一个旨在提高家政保洁服务预约效率和管理水平的平台。该系统通过集成现代信息技术,为家政公司、家政服务人员和消费者提供了一个便捷的在线预约和管理系统。 系统的主要功能包括: 1. **用户管理**:允许消费者注册、登录,并管理他们的个人资料和预约历史。 2. **家政人员管理**:家政服务人员可以注册并更新自己的个人信息、服务类别和服务时间。 3. **服务预约**:消费者可以浏览不同的家政服务选项,选择合适的服务人员,并在线预约服务。 4. **订单管理**:系统支持订单的创建、跟踪和管理,包括订单的确认、完成和评价。 5. **评价系统**:消费者可以在家政服务完成后对服务进行评价,帮助提高服务质量和透明度。 6. **后台管理**:管理员可以管理用户、家政人员信息、服务类别、预约订单以及处理用户反馈。 系统采用Java语言开发,使用MySQL数据库进行数据存储,通过B/S架构实现用户与服务的在线交互。系统设计考虑了不同用户角色的需求,包括管理员、家政服务人员和普通用户,每个角色都有相应的权限和功能。此外,系统还采用了软件组件化、精化体系结构、分离逻辑和数据等方法,以便于未来的系统升级和维护。 智能家政保洁预约系统通过提供一个集中的平台,不仅方便了消费者的预约和管理,也为家政服务人员提供了一个展示和推广自己服务的机会。同时,系统的后台管理功能为家政公司提供了强大的数据支持和决策辅助,有助于提高服务质量和管理效率。该系统的设计与实现,标志着家政保洁服务向现代化和网络化的转型,为管理决策和控制提供保障,是行业发展中的重要里程碑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值