`

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

阅读更多

在读这篇文章前需了解一个概念:共享锁【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锁】

相关推荐

    YII2数据库MySQL复制和读写分离配置

    MySQL数据库复制和读写分离是数据库管理中的重要概念和实践,可以有效提升数据库的扩展性和可用性。特别是在高流量的Web应用中,读写分离可以减轻主服务器的压力,提高应用的性能。YII2是一个基于组件的高性能PHP...

    springaop多数据库读写分离

    在IT行业中,数据库读写分离是一种常见的优化策略,主要用于提高系统的并发处理能力和数据读取效率。Spring AOP(面向切面编程)与MyBatis框架的结合应用,可以帮助我们实现这一目标。以下将详细讲解如何利用Spring ...

    .NET Core基于SQL Server数据库实现读写分离源码下载

    通过分析和学习这个源码,你可以了解到如何在实际项目中实现读写分离,包括如何设计数据库连接管理逻辑,以及如何与SQL Server数据库进行有效通信。 总之,".NET Core基于SQL Server数据库实现读写分离"的示例项目...

    数据库读写分离:提升性能与可用性的策略与实践

    本文将详细介绍数据库读写分离的概念、实现方法、以及在不同数据库系统中的实践应用。 数据库读写分离是一种有效的架构策略,可以显著提升数据库的性能和可用性。通过本文的探讨,我们了解到了读写分离的重要性、...

    在应用层透过spring解决数据库读写分离

    在应用层透过Spring解决数据库读写分离 数据库读写分离是指将数据库的读取和写入操作分开处理,以提高数据库的性能和可用性。在应用层解决数据库读写分离可以通过Spring框架来实现,本文将介绍如何使用Spring解决...

    JAVA数据库读写分离项目源码(MYSQL)

    在Java开发领域,数据库读写分离是一种常见的优化策略,它能显著提高系统性能,尤其是在高并发环境下。本项目源码是基于MySQL数据库实现的,利用SSM(Spring、SpringMVC、MyBatis)框架进行开发,旨在帮助开发者快速...

    数据库主从->读写分离

    在IT行业中,数据库主从复制和读写分离是优化系统性能和提高数据可用性的重要策略。下面我们将详细探讨这些概念,以及如何在SpringBoot+MyBatis框架下实现它们。 首先,**数据库主从复制**是一种数据库高可用性的...

    MyBatis做读写分离

    在数据库设计与应用领域,“读写分离”是一种常见的架构模式,它通过将数据读取操作和写入操作分配到不同的数据库服务器上来提高系统的整体性能。这种模式尤其适用于那些“读多写少”的应用场景。 #### 二、读写...

    mycat连接数据库做读写分离的文档

    MyCat是开源的分布式数据库系统,它主要用于解决大数据量下的高性能读写问题,常用于实现数据库的读写分离和水平扩展。在这个文档中,我们将深入探讨如何使用MyCat来连接数据库并实现读写分离。 首先,理解读写分离...

    数据库的读写分离配置1

    数据库的读写分离是分布式系统中的一个重要概念,用于提高数据库系统的性能和可扩展性。在高并发场景下,通过将读操作与写操作分配到不同的服务器上,可以避免单个数据库成为性能瓶颈,同时保证数据的一致性。下面将...

    在应用层通过spring特性解决数据库读写分离代码

    在现代企业级应用中,数据库读写分离是一种常见的优化策略,它可以提高系统的读取性能,减轻主数据库的压力,保证数据的稳定性和可用性。Spring框架提供了丰富的特性来支持这一实践,使得开发者能够在应用层轻松实现...

    mysql与mycat的读写分离

    本文介绍了MySQL与Mycat读写分离的基本概念及其实现过程,包括MySQL主从配置、表创建策略以及Mycat读写分离机制的启用方法。通过这种方式,不仅可以提高系统的整体性能,还可以增强系统的稳定性和可扩展性。在实际...

    oracle读写分离.docx

    #### 一、读写分离概念 **读写分离**是一种数据库设计模式,旨在通过将数据库的读操作与写操作分开,从而优化系统的整体性能。这种模式下,通常会有两个或多个数据库实例:一个主数据库负责处理写操作(包括插入、...

    数据库读写分离配置Amoeba和Mycat.docx

    #### 一、数据库读写分离概念及重要性 数据库读写分离是一种常见的数据库优化技术,主要用于提高系统的整体性能和扩展能力。随着业务量的增长,单一数据库往往难以承受大量的读写请求,特别是对于那些读操作远多于...

    springboot 实现mysql读写分离

    在IT行业中,数据库读写分离是一种常见的优化策略,特别是在高并发和大数据量的场景下,以提高系统的性能和可用性。本教程将详细介绍如何利用SpringBoot框架实现MySQL的读写分离,以及涉及到的相关技术。 首先,...

    互联网技术下的数据库主从复制与读写分离优化方案

    内容概要:本文深入讨论了在高并发情况下,通过数据库主从复制与读写分离来提升系统整体性能和可靠性的方法。首先阐述了主从复制的概念,接着详细讲解了其实现步骤与优化策略,主要包括启用并配置二进制日志、正确...

    springmvc mybatis 读写分离(一写多读)

    1. **读写分离的概念**:读写分离是数据库架构设计中的一个关键策略,它将数据库分为主库和多个从库。主库负责处理所有写操作,而从库则处理读操作。这样可以避免大量读操作对写操作的影响,提高整体系统性能。 2. ...

    mysql主从复制以及读写分离--读写分离

    MySQL的主从复制和读写分离是数据库高可用性和负载均衡的重要策略,它们在大型分布式系统中尤为关键。本文将详细解析这两个概念及其实施过程。 首先,MySQL的主从复制是指在一个MySQL集群中,数据的变化(写操作)...

    springMVC读写分离

    在IT行业中,数据库的读写分离是一种常见的优化策略,它能有效地提高系统性能,尤其是在高并发环境下。SpringMVC作为Java Web开发中的一个强大框架,能够很好地支持这种架构设计。以下将详细介绍如何在SpringMVC项目...

    实现mysql读写分离+使用视频

    在数据库管理中,读写分离是一种常见的优化策略,特别是在大型应用中,为了提高数据库的并发处理能力和响应速度。本教程将通过一系列视频和文档,详细讲解如何在MySQL环境中实现读写分离。 首先,我们来看“11-主从...

Global site tag (gtag.js) - Google Analytics