`
lirig
  • 浏览: 237445 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

数据库的读写分离

阅读更多

      随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状。读写分离现在被大量应用于很多大型网站,这个技术也不足为奇了。ebay就做得非常好。ebay用的是oracle,听说是用Quest Share Plex 来实现主从复制数据。

     读写分离简单的说是把对数据库读和写的操作分开对应不同的数据库服务器,这样能有效地减轻数据库压力,也能减轻io压力。主数据库提供写操作,从数据库提供读操作,其实在很多系统中,主要是读的操作。当主数据库进行写操作时,数据要同步到从的数据库,这样才能有效保证数据库完整性。Quest SharePlex就是比较牛的同步数据工具,听说比oracle本身的流复制还好,mysql也有自己的同步数据技术。mysql只要是通过二进制日志来复制数据。通过日志在从数据库重复主数据库的操作达到复制数据目的。这个复制比较好的就是通过异步方法,把数据同步到从数据库。

      主数据库同步到从数据库后,从数据库一般由多台数据库组成这样才能达到减轻压力的目的。读的操作怎么样分配到从数据库上?应该根据服务器的压力把读的操作分配到服务器,而不是简单的随机分配。mysql提供了MySQL-Proxy实现读写分离操作。不过MySQL-Proxy好像很久不更新了。oracle可以通过F5有效分配读从数据库的压力。


ebay的读写分离(网上找到就拿来用了)



 mysql的读写分离
       上面说的数据库同步复制,都是在从同一种数据库中,如果我要把oracle的数据同步到mysql中,其实要实现这种方案的理由很简单,mysql免费,oracle太贵。好像Quest SharePlex也实现不了改功能吧。好像现在市面还没有这个工具吧。那样应该怎么实现数据同步?其实我们可以考虑自己开发一套同步数据组件,通过消息,实现异步复制数据。其实这个实现起来要考虑很多方面问题,高并发的问题,失败记录等。其实这种方法也可以同步数据到memcache中。听说oracle的Stream也能实现,不过没有试过。


 

  • 大小: 24.3 KB
  • 大小: 21 KB
15
1
分享到:
评论
9 楼 lisanshao 2015-05-14  
lirig 写道
davos 写道
其实我想知道的是我们的应用程序应该如何连接这主从数据库呢?

连接很简单的,如果是mysql和原来一样,f5也一样。网上很多资料。有问题单独找我。

这个就是胡说了!如何访主库、从库,这个要在应用上做处理。主从分离的数据起码存在2个数据源。因此,可以通过自己封装对数据库的操作,提供统一的数据库入口。比如,所有查询的请求,提供一个接口请求从库.;所有增删改的请求,提供一个接口请求主库。
8 楼 lirig 2010-04-12  
davos 写道
其实我想知道的是我们的应用程序应该如何连接这主从数据库呢?

连接很简单的,如果是mysql和原来一样,f5也一样。网上很多资料。有问题单独找我。
7 楼 lirig 2010-04-12  
pekkle 写道
很多应用要考虑延时的问题,订单进去了,去历史查看,没看到数据,客服座机每天忙死。宁愿采用分布式分解压力

这个和读写分离没有多大关系,可以单独用服务器来保存历史数据,数据延迟时间要根据业务来定。
6 楼 魔力猫咪 2010-04-09  
pekkle 写道
很多应用要考虑延时的问题,订单进去了,去历史查看,没看到数据,客服座机每天忙死。宁愿采用分布式分解压力

一定需要马上看到吗?你们的系统不会提交一个订单1-2个小时看不到吧。
其实延时数秒对提交非实时订单之类的应用并没什么关系。比如你去网站买书。你提交订单后系统只是告诉你订单已经被提交,正在处理。初步处理后可以在历史记录里看到。那么你看这条信息的时间就有好几秒。那么后台异步只要在这几秒后能让你看到,对你来说没有任何延时。
不同系统对延时的要求是不同的,有些要求非常快的系统对存储速度的要求非常高,但是这些系统毕竟是少数。觉大多数系统对一定的系统延迟都是可以接受的。而且mysql可以通过SemiSyncReplicationDesign补丁支持半同步复制。
5 楼 pekkle 2010-04-09  
很多应用要考虑延时的问题,订单进去了,去历史查看,没看到数据,客服座机每天忙死。宁愿采用分布式分解压力
4 楼 seu_yong 2010-04-04  
做读写分离的时候,延迟的想象肯定是存在的,并且有时候还会出现同步失败,需要通过补偿机制来保证数据的完整性,这个时候延迟就更明显了,所以一般实际应用过程中,对于数据的实时性和正确性要求很强的业务点,写库应该同时作为数据基准库,直接从写库读取数据,而读库的职责只是分担大部分的实时性要求不高的业务点的读操作而已吧?
3 楼 davos 2010-04-02  
其实我想知道的是我们的应用程序应该如何连接这主从数据库呢?
2 楼 魔力猫咪 2010-03-31  
所谓的日志复制就是告诉读服务器主服务器做了哪些操作。然后读服务器按照日志也做一遍。延迟是肯定的。属数据库同步无论如何快,也有一个过程。只要这个延迟在可以接受的范围之内就可以。
“假如往主数据库删除数据时再返回记录列表,会不会存在从用来读的数据库数据还没有删除的情况?”
这种情况就是在一个服务器上也会出现的。除非你把事务等级调整到串行读。
1 楼 flyer2010 2010-03-31  
问老大一个问题:mysql怎么样通过二进制日志来复制数据,同步数据的? 假如往主数据库删除数据时再返回记录列表,会不会存在从用来读的数据库数据还没有删除的情况?

相关推荐

    数据库读写分离demo.rar

    数据库读写分离是一种常见的优化策略,特别是在高并发、大数据量的场景下,为了提升系统性能和可用性。在这个"数据库读写分离demo.rar"中,我们可以看到一个基于SQL Server 2016、ASP.NET Core 2.1和Entity ...

    数据库读写分离架构

    数据库读写分离是一种常见的数据库架构优化策略,主要是为了应对数据量大、读写操作频繁导致的性能瓶颈。在读写分离架构中,主库负责处理所有的写操作,而从库则处理读操作。主库与从库之间的数据同步通常通过主库的...

    数据库读写分离解决方案--DG实施方案.docx

    "数据库读写分离解决方案--DG实施方案" 本文将详细介绍 Oracle Data Guard 实施方案,旨在实现数据库读写分离解决方案。该方案通过 DG 实现主库与备库同步,主库作为业务应用库,备库作为查询库,应用根据不同需求...

    C# Redis数据库读写分离

    在IT行业中,数据库读写分离是一种常见的优化策略,主要用于提高系统的并发处理能力和数据读取效率。Redis作为一款高性能的键值存储系统,被广泛应用于缓存、消息队列等场景。在C#环境下,我们可以利用各种客户端库...

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

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

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

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

    使用Oracle Active Data Guard实现PMS2.0数据库读写分离初探.pdf

    使用Oracle Active Data Guard实现PMS2.0数据库读写分离初探 本文研究了使用Oracle Active Data Guard实现PMS2.0数据库读写分离,以解决PMS2.0业务系统中数据库I/O吞吐量和资源耗用的性能瓶颈问题。本文首先介绍了...

    数据库读写分离demo

    数据库读写分离是一种常见的优化策略,它通过将数据的读取操作和写入操作分散到不同的数据库服务器上,以提高系统的并发处理能力和响应速度。在大型应用系统中,由于读操作通常远多于写操作,读写分离可以显著降低主...

    springboot数据库读写分离

    springboot数据库读写分离,代码实现一主两从的读写分离,业务代码不影响,正常写就可以。可以根据自己需要修改

    springaop多数据库读写分离

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

    基于JAVA springboot的SPI的数据库读写分离starter+源码+项目文档(毕业设计&课程设计&项目开发)

    基于JAVA springboot的SPI的数据库读写分离starter+源码+项目文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档~ 基于JAVA springboot的SPI的...

    springboot+mybatis+druid+redis实现数据库读写分离和缓存

    在现代Web应用开发中,数据库读写分离和缓存技术是提高系统性能和可扩展性的关键策略。本项目采用SpringBoot、MyBatis、Druid和Redis这四个核心技术来实现这一目标。以下将详细讲解这些组件如何协同工作,以及它们...

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

    ### 数据库读写分离配置Amoeba和Mycat #### 一、数据库读写分离概念及重要性 数据库读写分离是一种常见的数据库优化技术,主要用于提高系统的整体性能和扩展能力。随着业务量的增长,单一数据库往往难以承受大量的...

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

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

    数据库读写分离(aop方式完整实现)

    最近项目要支持读写分离, 网上找了很多,但都是不太完整,我自己整理了下供大家参考。 我的项目使用的框架: springMvc+spring+hibernate+springJPA+maven, 数据库连接池用阿里的druid。

    1-2+如何正确使用数据库读写分离1

    数据库读写分离是一种常见的数据库架构优化策略,尤其适用于高并发、读多写少的系统,如电商、社交等互联网应用。这种策略旨在减轻数据库的压力,提高系统的整体性能和可用性。 在系统初始阶段,通常采用单数据库...

    行业分类-设备装置-一种实现数据库读写分离的方法和设备.zip

    数据库读写分离是一种在大型应用系统中常见的优化策略,它主要应用于高并发、大数据量的场景,以提高数据库系统的性能和可用性。标题和描述中提到的“行业分类-设备装置-一种实现数据库读写分离的方法和设备”指的是...

    mysql数据库读写分离负载均衡

    【MySQL 数据库读写分离与负载均衡】 MySQL 数据库的读写分离是一种常见的优化策略,旨在提高系统的可扩展性和性能。在大型应用中,数据库往往成为性能瓶颈,尤其是在高并发的场景下,读写操作混杂可能导致服务器...

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

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

    spring+springmvc+mybatis+maven+mysql数据库读写分离

    在构建大型分布式系统时,数据库读写分离是一个重要的优化策略,它可以提高系统的可扩展性和性能。本项目结合了Spring、SpringMVC、MyBatis和Maven等技术,与MySQL数据库一起实现读写分离,以提升应用的处理能力。...

Global site tag (gtag.js) - Google Analytics