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

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介:

为了节约成本,也是为了顺应去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


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
Oracle Java 关系型数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
【服务器】python通过JDBC连接到位于Linux远程服务器上的Oracle数据库
13 6
|
1天前
|
SQL Oracle 关系型数据库
零基础入门 Oracle数据库:轻松上手
零基础入门 Oracle数据库:轻松上手
4 0
|
1天前
|
Oracle 关系型数据库 Java
java操作多数据源将oracle数据同步达梦数据库
java操作多数据源将oracle数据同步达梦数据库
|
1天前
|
关系型数据库 MySQL 数据库
docker MySQL删除数据库时的错误(errno: 39)
docker MySQL删除数据库时的错误(errno: 39)
|
1天前
|
关系型数据库 MySQL 数据库连接
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
用Navicat备份Mysql演示系统数据库的时候出:Too Many Connections
|
1天前
|
关系型数据库 MySQL Linux
本地虚拟机centos7通过docker安装主从mysql5.7.21
本地虚拟机centos7通过docker安装主从mysql5.7.21
|
2天前
|
SQL canal 运维
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型
MySQL高可用架构探秘:主从复制剖析、切换策略、延迟优化与架构选型
|
2天前
|
存储 Oracle 关系型数据库
oracle 数据库 迁移 mysql数据库
将 Oracle 数据库迁移到 MySQL 是一项复杂的任务,因为这两种数据库管理系统具有不同的架构、语法和功能。
15 0
|
3天前
|
运维 负载均衡 关系型数据库
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
MySQL高可用解决方案演进:从主从复制到InnoDB Cluster架构
|
5天前
|
关系型数据库 MySQL 数据库
MySQL集群 双主架构(配置命令)
MySQL集群 双主架构(配置命令)

推荐镜像

更多