`

数据库设计の读写分离(概念篇)

阅读更多

在读这篇文章前需了解一个概念:共享锁【S锁】排他锁【X锁】

共享锁【S锁】
又称读锁,事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。
排他锁【X锁】
又称写锁。若事务T对数据对象A加上X锁,事务T可以读A也可以修改A,其他事务不能再对A加任何锁,直到T释放A上的锁。这保证了其他事务在T释放A上的锁之前不能再读取和修改A。

读写分离概述:

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

案例分析举例:

为什么要分库、分表、读写分?单表的数据量限制,当单表数据量到一定条数之后数据库性能会显著下降。数据多了之后,对数据库的读、写就会很多。分库减少单台数据库的压力。

对于读大于写并且数据量增加不是很明显的数据库,推荐采用读写分离+缓存的模式,试想一下一个用户注册、修改用户信息、记录用户登录时间、记录用户登录IP、修改登录密码,这些是写操作。但是以上这些操作次数都是很小的,所以整个数据库的写压力是很小的。唯一一个比较大的就是记录用户登录时间、记录用户登录IP这类信息,只要把这些经常变动的信息排除在外,那么写操作可以忽略不计。所以读写分离首要解决的就是经常变化的数据的拆分,比如:用户登录时间、记录用户登录IP。这类信息可以单独独立出来(因为一个数据量很大的表,做一次写的操作数据库表索引等需要从新排序的,很耗时),记录在持久化类的缓存中。以oracle为例,主库负责写数据、读数据。读库仅负责读数据。每次有写库操作,同步更新cache,每次读取先读cache在读DB。写库就一个,读库可以有多个,采用dataguard来负责主库和多个读库的数据同步。

提升性能的原因:

1.物理服务器增加,负荷增加
2.主从只负责各自的写和读,极大程度的缓解X锁和S锁争用

3.分摊读取。假如我们有1主3从,不考虑上述1中提到的从库单方面设置,假设现在1 分钟内有10条写入,150条读取。那么,1主3从相当于共计40条写入,而读取总数没变,因此平均下来每台服务器承担了10条写入和50条读取(主库不 承担读取操作)。因此,虽然写入没变,但是读取大大分摊了,提高了系统性能。另外,当读取被分摊后,又间接提高了写入的性能。所以,总体性能提高了,说白 了就是拿机器和带宽换性能。



 其它提升性能方式:

读写分离,添加缓存,分表,分区,不用select * ,为表合理简历索引,设计表的时候尽量原子化!可以分库【垂直拆分】,分表【水平拆分】。结合步同应用场景定制自己的方案。

 

文章摘自:

http://blog.csdn.net/kobejayandy/article/details/8775255

http://my.oschina.net/candiesyangyang/blog/203425

http://www.open-open.com/lib/view/open1413274853450.html

  • 大小: 74.7 KB
0
0
分享到:
评论
2 楼 lzg406 2015-11-12  
共享锁【S锁】 这个解释有待验证
1 楼 lzg406 2015-11-12  
共享锁【S锁】

相关推荐

    主从服务器读写分离doc文档

    1:数据库集群技术 集群由3个概念 1:sql节点 sql node 2:数据节点 data node 3:管理节点 ndb managerment

    SQL Server AlwaysOn读写分离配置图文教程

    Alwayson相对于数据库镜像最大的优势就是可读副本,带来可读副本的同时还添加了一个新的功能就是配置只读路由实现读写分离;当然这里的读写分离稍微夸张了一点,只能称之为半读写分离吧!看接下来的文章就知道为什么...

    MySQL主从复制与读写分离原理及用法详解

    主要介绍了MySQL主从复制与读写分离原理及用法,结合实例形式详细分析了mysql数据库主从复制、读写分离基本概念、原理、用法及操作注意事项,需要的朋友可以参考下

    mysql面试题史上最强汇总:基础知识+性能优化+备份与恢复+ 数据库设计+数据库管理+高可用性与容灾+安全性+ 框架集成等

    6. 高可用性与容灾:包括主从复制、多节点复制、集群配置、读写分离、负载均衡等。 7. 安全性:包括数据加密、SSL/TLS 加密传输、安全配置等。 8. 框架集成:包括 MySQL 数据库在不同框架中的集成、ORM 框架的使用等...

    数据库架构设计.pdf

    分布式处理,数据⼀致性、完整性、及时性 如果系统⽐较简单,数据量、访问量很⼩,那就没必要过多考虑系统架构,在部署上采⽤raid技术,分层存储,读写分离,主备技术,负载 均衡等⽅法。 通过以上就可以清晰的知道...

    企业分布式数据库架构方案研究与设计

    通过先分析研究分布式数据库的读写分离、分表分库的原理进而引出数据库中间件的概念,然后对比当前主流数据库中间件优缺点,最终选择以mycat作为数据库中间件进行数据的分片以及读写分离,设计一套可供企业分布式...

    达梦数据库_SQL语言手册

    附加分离数据库 第章一致性和并发性 事务相关语句 事务的开始 事务的结束 保存点相关语句 设置事务隔离级及读写特性 手动上锁语句 第章存储模块 存储模块的定义 存储模块的删除 存储模块的控制语句 ...

    2017最新老男孩MySQL高级专业DBA实战课程全套【清晰不加密】,看完教程月入40万没毛病

    05-mysql数据库读写分离介绍及企业生产实现方案.avi 06-根据企业业务拆分业务应用到不同的从库思想.avi 07-mysql主从复制原理画图深入浅出讲解.avi 08-mysql主从复制实战01.avi 09-mysql主从复制实战02.avi 10-主从...

    Apache ShardingSphere 分布式SQL事务与查询引擎

    增强(Enhance):捕获数据库访问入口点,透明地提供额外功能,例如:重定向(分片、读写分离及影子库)、转换(数据加密和脱敏处理)、认证(安全、审计及权限管理)、治理(熔断器、访问限制、分析、服务质量控制...

    支持多数据库的ORM框架ef-orm.zip

    ef-orm A Simple OR-Mapping framework on multiple databases. ... EF-ORM是一个轻量,便捷的Java ORM框架。并且具备若干企业级的... SQL分析,性能统计,分库分表,Oracle RAC支持,读写分离支持 标签:eform

    从零学架构无评论版

    高性能架构模式:将介绍高性能数据库集群读写分离、分库分表两种方案,NoSQL 方案的典型特征和应用场景,缓存的架构设计三大要点;介绍 PPC、TPC、Reactor、Proactor 模型提升性能,以及负载均衡的分类与架构、算法...

    mysql集群概念

    mysql集群基本概念!采用多台 Mysql 数据库服务器可以大大的增强 Mysql 的数据存储和处理能力,可 以部署成主从复制和读写分离的,即一个主数据库(Master)和一个或多个从数据库 (Slaver),主从数据库的数据库

    amoeba分布式数据库解决方案

    Amoeba在分布式数据库领域将致力解决数据切分,应付客户端“集中式”处理分布式数据。这 儿集中式是一个相对概念,客户端不需要知道某种数据的物理存储地。避免这种逻辑出现在业务端, 大大简化了客户端操作分布式...

    MySQL学习笔记(含基础、运维、进阶三部分)

    MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) MySQL学习笔记(含基础、运维、进阶三部分) 包含了我学习 MySQL 过程中...MySQL锁、读写分离、分库分表等 实际案例和示例代码

    分布式数据层TDDL.zip

    头都大了 ©_Ob)框架,主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制,它是一个基于集中式配置的 jdbc datasource实现,具有主备,读写分离,动态数据库配置等功能。 TDDL所处的位置(tddl通用...

    linux下指定mysql数据库服务器主从同步的配置实例

    一、 概念: ① 数据库同步 (主从同步 — 主数据库写的同时 往从服务器写数据)② 数据库同步 (主主同步 — 两台数据库服务器互相写数据) 二、 举例数据库服务器(A) 主数据库 IP:192.168.1.134数据库服务器...

    C#开发典型模块大全(光盘)

    3.2.4 如何分离数据库 3.2.5 设置数据库模式 3.3 设计过程 3.3.1 主窗体 3.3.2 获取服务器名称 3.3.3 获取所有数据库 3.3.4 获取所有数据表 3.3.5 备份数据库 3.3.6 还原数据库 3.3.7 附加数据库 3.3.8 分离数据库 ...

    C#开发典型模块大全(光盘)第一部分

    3.2.4 如何分离数据库 3.2.5 设置数据库模式 3.3 设计过程 3.3.1 主窗体 3.3.2 获取服务器名称 3.3.3 获取所有数据库 3.3.4 获取所有数据表 3.3.5 备份数据库 3.3.6 还原数据库 3.3.7 附加数据库 3.3.8 分离数据库 ...

    Java思维导图xmind文件+导出图片

    基于Mycat实习MySQL数据库读写分离 基于Mycat实战之数据库切分策略剖析 Mycat全局表、Er表、分片预警分析 Nginx 基于OpenResty部署应用层Nginx以及Nginx+lua实战 Nginx反向代理服务器及负载均衡服务器配置实战...

Global site tag (gtag.js) - Google Analytics