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

本文涉及的产品
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
RDS AI 助手,专业版
简介:

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


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
9月前
|
负载均衡 算法 关系型数据库
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
本文聚焦 MySQL 集群架构中的负载均衡算法,阐述其重要性。详细介绍轮询、加权轮询、最少连接、加权最少连接、随机、源地址哈希等常用算法,分析各自优缺点及适用场景。并提供 Java 语言代码实现示例,助力直观理解。文章结构清晰,语言通俗易懂,对理解和应用负载均衡算法具有实用价值和参考价值。
大数据大厂之MySQL数据库课程设计:揭秘MySQL集群架构负载均衡核心算法:从理论到Java代码实战,让你的数据库性能飙升!
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
1033 3
Mysql高可用架构方案
|
存储 SQL 关系型数据库
MySQL进阶突击系列(03) MySQL架构原理solo九魂17环连问 | 给大厂面试官的一封信
本文介绍了MySQL架构原理、存储引擎和索引的相关知识点,涵盖查询和更新SQL的执行过程、MySQL各组件的作用、存储引擎的类型及特性、索引的建立和使用原则,以及二叉树、平衡二叉树和B树的区别。通过这些内容,帮助读者深入了解MySQL的工作机制,提高数据库管理和优化能力。
|
8月前
|
关系型数据库 MySQL 分布式数据库
Super MySQL|揭秘PolarDB全异步执行架构,高并发场景性能利器
阿里云瑶池旗下的云原生数据库PolarDB MySQL版设计了基于协程的全异步执行架构,实现鉴权、事务提交、锁等待等核心逻辑的异步化执行,这是业界首个真正意义上实现全异步执行架构的MySQL数据库产品,显著提升了PolarDB MySQL的高并发处理能力,其中通用写入性能提升超过70%,长尾延迟降低60%以上。
|
监控 关系型数据库 MySQL
深入了解MySQL主从复制:构建高效稳定的数据同步架构
深入了解MySQL主从复制:构建高效稳定的数据同步架构
431 1
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
10月前
|
负载均衡 算法 关系型数据库
大数据新视界--大数据大厂之MySQL数据库课程设计:MySQL集群架构负载均衡故障排除与解决方案
本文深入探讨 MySQL 集群架构负载均衡的常见故障及排除方法。涵盖请求分配不均、节点无法响应、负载均衡器故障等现象,介绍多种负载均衡算法及故障排除步骤,包括检查负载均衡器状态、调整算法、诊断修复节点故障等。还阐述了预防措施与确保系统稳定性的方法,如定期监控维护、备份恢复策略、团队协作与知识管理等。为确保 MySQL 数据库系统高可用性提供全面指导。
|
12月前
|
SQL 存储 缓存
MySQL的架构与SQL语句执行过程
MySQL架构分为Server层和存储引擎层,具有高度灵活性和可扩展性。Server层包括连接器、查询缓存(MySQL 8.0已移除)、分析器、优化器和执行器,负责处理SQL语句;存储引擎层负责数据的存储和读取,常见引擎有InnoDB、MyISAM和Memory。SQL执行过程涉及连接、解析、优化、执行和结果返回等步骤,本文详细讲解了一条SQL语句的完整执行过程。
417 3
|
SQL 存储 缓存
【赵渝强老师】MySQL的体系架构
本文介绍了MySQL的体系架构,包括Server层的7个主要组件(Connectors、Connection Pool、Management Service & Utilities、SQL Interface、Parser、Optimizer、Query Caches & Buffers)及其作用,以及存储引擎层的支持情况,重点介绍了InnoDB存储引擎。文中还提供了相关图片和视频讲解。
460 2
【赵渝强老师】MySQL的体系架构
|
SQL 存储 关系型数据库
MySQL进阶突击系列(01)一条简单SQL搞懂MySQL架构原理 | 含实用命令参数集
本文从MySQL的架构原理出发,详细介绍其SQL查询的全过程,涵盖客户端发起SQL查询、服务端SQL接口、解析器、优化器、存储引擎及日志数据等内容。同时提供了MySQL常用的管理命令参数集,帮助读者深入了解MySQL的技术细节和优化方法。

热门文章

最新文章

推荐镜像

更多