开发者社区> 科技小能手> 正文

从oracle到mysql,主从到分库,一个普通项目数据库架构的变迁

简介:
+关注继续查看

为了节约成本,也是为了顺应去IOE这个大时代的发展,项目的数据库从最初的Oracle切到了MySQL。

开始切到MySQL的时候项目才上线时间不长,当时数据不多,而且当时预计在较长一段时间内数据也不会发生爆炸式的变化,考虑到大部分是读的请求所以考虑用主从架构。

注:存储引擎用的是InnoDB,当时主要是考虑事物的需求,其实在选择存储引擎的时候没有特殊需求都应该选择InnoDB,关于InnoDB和MyISam的区别可参考:MySQL存储引擎之MyISAM、InnoDB详细对比


市面上目前开源且比较有名字的中间件主要有3种,分别是360的atlas、阿里巴巴的Cobar(目前也有叫MyCat,其实应该都是说同一个东西)、淘宝的TDDL。


Atlas https://github.com/Qihoo360/Atlas/wiki

我们将Atlas作为主从架构的中间件,之所以选择Atlas是因为其简单只是做个纯转发的操作,所以对SQL语句的支持度也是很好的,且具有以下特性能满足我们的需求:

1、实现读写分离;

2、实现分表;

3、主库宕机会被自动摘掉不影响从库的读,从库宕机也会被自动摘掉不影响应用;

4、通过管理接口,简化管理工作,DB的上下线对应用完全透明,同时可以手动上下线;

5、所有MYSQL支持的SQLAtlas都支持。换句话说:Atlas并不分析SQL,只是把SQL语句路由到对应数据库节点;

6、支持事物:事物内SQL全部走写节点;

7、为了解决读写分离存在写完马上就想读而这时可能存在主从同步延迟的情况,Altas中可以在SQL语句前增加 /*master*/ 就可以将读请求强制发往主库;

8、能通过client-ips参数对有权限连接Atlas的ip进行过滤;

9、日志中记录所有通过Atlas处理的SQL语句,包括客户端IP、实际执行该语句的DB、执行结果以及耗费的时间。


Atlas架构图:

wKioL1OkCrigVIqgAC2eeBfNwf0940.jpg


缺点:

1、Atlas在主库或者从库宕机摘掉后不会自动恢复,需要自己手动去或者写心跳脚本去处理;

2、不能实现分布式分表,所有的子表必须在同一台DB的同一个database


Cobar

随着接入应用的激增,token表数据在未来可预计的时间内会发生重大变化,单表数据太大主从明显已经力不从心,故而考虑了分库分表,对于此种业务场景cobar是不二的选择。我们使用cobar的一个很重要的考量是团队中有人阅读过并具有修改相关代码的能力,且公司中其他团队有相关的成功使用经验。

cobar架构图:

wKiom1Oo-vCSI3LdACCeCyv5Xsw195.jpg

优点:

1、Mycat支持将一张表水平拆分成多份分别放入不同的库来实现表的水平拆分;

2、Mycat支持将不同的表放入不同的库。


缺点:

1、支持标准SQL99语法,不支持部分Mysql特定的SQL

2、分库字段不能UPDATE

3、查询条件中尽量带分库字段,否则扫描所有分库节点合并结果集。

4、数据库中新增表后,Mycat中必须修改配置文件,增加表配置。

5、对事物的支持不够好,不支持SAVEPOINT操作。

6、不支持跨库情况下的join、分页、排序、子查询操作。

7、分库情况下,insert语句必须包含拆分字段列名。

8、分库情况下,update语句不能更新拆分字段的值。


以上的都是基于实际工作中的使用经验总结的,因个人使用场景和个人阅历的关系可能不完全准确,仅供参考。



本文转自 古道卿 51CTO博客,原文链接:http://blog.51cto.com/gudaoqing/1429002


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
23874 0
Python爬虫入门教程 39-100 天津市科技计划项目成果库数据抓取 scrapy
爬前叨叨 缘由 今天本来没有打算抓取这个网站的,无意中看到某个微信群有人问了一嘴这个网站,想看一下有什么特别复杂的地方,一顿操作下来,发现这个网站除了卡慢,经常自己宕机以外,好像还真没有什么特殊的..
623 0
推荐物联网项目中采用时序数据库
时间数据库的产品已经比较成熟。在物联网项目、制造业信息化项目中,使用时序数据库有很大益处。 于是简要编写一篇文章,供大家参考🤝
66 0
我的第一个extjs desktop + jsp +mysql实战练习项目
一直使用asp.net+mssql 花了二周时间,边学边做,把一个ms sql server +asp.net + extjs desktop 改造为  mysql + jsp + extjs desktop 的项目,界面如下,以为纪念: ...
1059 0
Rainbond 持续部署Vue、React前端项目
本文主要介绍在云原生应用管理平台Rainbond中部署Vue、React等前端项目的方式。
1208 0
android 线上项目 MysqlConsole
  http://shouji.baidu.com/software/9835321.html   开发工具,手机端查询mysql数据库 *查看数据库,表,数据 注意:本地mysql需要分享无限网络连接,阿里数据库,需要连接数据流量不支持代理 ssl   表数据 可以左右滑动查看所有属性                        捐助开发者 在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。
733 0
MySQL---数据库从入门走向大神系列(十二)-构建MVC项目
这个是对前面技术的一个小总结吧,用到的大概技术有: MVC框架,加注解,Struts框架的思想,动态代理,线程管理对象ThreadLocal,Connection对象池,Properties文件读取,EL表达式,JSTL,JavaBean,Java访问MySQL数据库,增删改查… 其实做出来界面挺简单: 完整的项目链接: https://github.
850 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
17790 0
23705
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载