精华内容
下载资源
问答
  • 数据库水平扩展与垂直扩展 MySQL数据库水平扩容方案 转载于:https://www.cnblogs.com/apeway/p/10870810.html

     

    数据库水平扩展与垂直扩展

     

    MySQL数据库水平扩容方案

    转载于:https://www.cnblogs.com/apeway/p/10870810.html

    展开全文
  • 数据库水平扩展和垂直扩展

    千次阅读 2018-03-12 16:03:24
    原地址:https://www.cnblogs.com/blfshiye/p/5059748.html ...随着负载的增大,对数据库读写性能的要求往往成为非常大的挑战。在这种情况下我们能够考虑数据库相关的replication机制提高读写...

     原地址:https://www.cnblogs.com/blfshiye/p/5059748.html

            https://www.2cto.com/database/201607/524821.html

        数据库经常是我们存储和訪问数据的经常使用介质。随着负载的增大,对数据库读写性能的要求往往成为非常大的挑战。在这种情况下我们能够考虑数据库相关的replication机制提高读写的性能。因为一般採用一写多读的replication机制(写master同步到多个slaves),导致这种机制往往会有缺陷。首先它依赖于读写的比例,假设写的操作过多,导致master往往成为性能的瓶颈所在,从而使得slaves的数据同步延迟也变大,进而大大消耗CPU的资源,而且导致数据的不一致从而影响到用户的体验。

           这个时候我们就要考虑使用数据库的sharding(分片)机制,这里面我们所说sharding机制并非一个数据库软件的附属功能,而是一种相对简朴的软件理念。

    一般我们把sharding机制分成水平扩展(横向扩展,或者向外扩展)和垂直扩展两种方式。

    详细什么是数据库的水平扩展和垂直扩展呢?我们以以下的样例来说明。

           比方我们如今有两个表:用户信息表 产品订单表

           水平的拆分的方案,即不改动数据库表结构。通过对表中数据的拆分而达到分片的目的:

    1)使用用户id做hash,分解数据库,在訪问数据库的使用用户id做路由。

    2)将产品订单表依照已下单和未下单区分成两个表。

           一般水平拆分在查询数据库的时候可能会用到union操作。

     

    垂直拆分的方案:将表和表分离,或者改动表结构,依照訪问的差异将某些列拆分出去。

             1)将用户信息表放到一个数据库server,将产品订单表放到一个数据库server。

             2)将用户信息表中主码(通常是user id)和一些经常使用的信息放到一个表,将主码和不经常使用的信息放到另外的表。这导致一般查询数据的时候可能会用到join操作。

    在数据库的设计中,我们更关注数据库的水平扩展的能力。

    一、数据库水平扩展

    数据库的横向扩展支持三种方法,即主从复制,集群和分片(sharding)。

    主从复制

    主从复制(Master-slave replication),最易配置,对应用改动最小,并可以减轻主库的负担。

    主数据库可以读写,从数据库只读。最常用的场景就是实现读写分离,或业务分离,即运行报表,备份,数据仓库等应用。

    这种方法的问题是主与从之间数据非完全同步,可能会读到两个不同的版本。另一个问题是,如果只有主库接受读写,那么主库迟早会过载,因此不算是真正的scale out。

    不过主从库数据的延迟,有的业务是可以接受的。另外,利用一些实时复制的工具如GoldenGate,从库也是可以写的,这时可以利用从库做其它的业务,从而达到横向扩展的目的。这也算是主从复制的一个新趋势。

    集群(Clustering)

    集群也称为shared everything或shared disk架构。最知名的就是Oracle RAC。

    1个数据库可以有多个实例,来访问共享存储上的数据库。

    每一个节点都可以读写,从应用角度来看,代码无需改变。负载均衡也是自动的。

    集群存在的问题包括:

    * 写数据时需要内存中数据的同步,数据加速带来竞争,影响扩展性

    * 难以设置和管理

    * 由于存储是共享的,读操作也不能无限扩展

    集群适合于读密集的应用,如数据仓库和BI。

    分片(Sharding)

    分区(Partition)是库内的,分片(Sharding)是库外的,也叫分表分库, 是shared nothing的架构。

    Sharding即将一个大的库拆分成很多小库。如何拆和业务规则有关,可以按用户ID拆,按业务拆。如果需要Join,相关的表需要放到一个库里,避免数据库间的通讯。

    Sharding也可以有两种方法,即垂直分区和水平分区。

    垂直分区是按业务分,简称为分库,即不同的业务使用不同的库,互不相干。垂直分区到一定程度,也无法扩展,这时需要水平分区。

    水平分区则是将一个大表拆分为小表,每个小表位于不同的库。每一个建立相同的schema。如根据主键的hash值来分区。

    sharding的不足在于:

    * 加大了应用代码的复杂性,需要路由到正确的shard。

    * 后期增加shard需要修改应用逻辑,并需要迁移数据

    * 查询和聚集(aggregation)不再简单,需要跨库联合操作

    * 主数据和参照数据需要复制到所有shard,以避免跨库操作。主数据和参照数据虽然偏静态,但一旦修改,可能会有数据一致性问题。

    * 跨库修改需要分布式交易处理,会限制可扩展性。因此应尽量避免。

    * 单个shard的失效可能会使整个系统不可用(其实也不一定)。因此通常需要为每个shard再配置HA方案,如主从复制。





    主从复制

    主从复制(Master-slave replication),最易配置,对应用改动最小,并可以减轻主库的负担。

    主数据库可以读写,从数据库只读。最常用的场景就是实现读写分离,或业务分离,即运行报表,备份,数据仓库等应用。

    这种方法的问题是主与从之间数据非完全同步,可能会读到两个不同的版本。另一个问题是,如果只有主库接受读写,那么主库迟早会过载,因此不算是真正的scale out。

    不过主从库数据的延迟,有的业务是可以接受的。另外,利用一些实时复制的工具如GoldenGate,从库也是可以写的,这时可以利用从库做其它的业务,从而达到横向扩展的目的。这也算是主从复制的一个新趋势。

    集群(Clustering)

    集群也称为shared everything或shared disk架构。最知名的就是Oracle RAC。

    1个数据库可以有多个实例,来访问共享存储上的数据库。

    每一个节点都可以读写,从应用角度来看,代码无需改变。负载均衡也是自动的。

    集群存在的问题包括:

    * 写数据时需要内存中数据的同步,数据加速带来竞争,影响扩展性

    * 难以设置和管理

    * 由于存储是共享的,读操作也不能无限扩展

    集群适合于读密集的应用,如数据仓库和BI。

    分片(Sharding)

    分区(Partition)是库内的,分片(Sharding)是库外的,也叫分表分库, 是shared nothing的架构。

    Sharding即将一个大的库拆分成很多小库。如何拆和业务规则有关,可以按用户ID拆,按业务拆。如果需要Join,相关的表需要放到一个库里,避免数据库间的通讯。

    Sharding也可以有两种方法,即垂直分区和水平分区。

    垂直分区是按业务分,简称为分库,即不同的业务使用不同的库,互不相干。垂直分区到一定程度,也无法扩展,这时需要水平分区。

    水平分区则是将一个大表拆分为小表,每个小表位于不同的库。每一个建立相同的schema。如根据主键的hash值来分区。

    sharding的不足在于:

    * 加大了应用代码的复杂性,需要路由到正确的shard。

    * 后期增加shard需要修改应用逻辑,并需要迁移数据

    * 查询和聚集(aggregation)不再简单,需要跨库联合操作

    * 主数据和参照数据需要复制到所有shard,以避免跨库操作。主数据和参照数据虽然偏静态,但一旦修改,可能会有数据一致性问题。

    * 跨库修改需要分布式交易处理,会限制可扩展性。因此应尽量避免。

    * 单个shard的失效可能会使整个系统不可用(其实也不一定)。因此通常需要为每个shard再配置HA方案,如主从复制。


    展开全文
  • 数据库经常是我们存储和訪问数据的经常使用介质。随着负载的增大,对数据库读写性能的要求往往成为非常大的挑战。在这种情况下我们能够考虑数据库相关的replication机制提高读写的性能。因为一般采用一写多读的...

    在互联网应用中。数据库经常是我们存储和訪问数据的经常使用介质。随着负载的增大,对数据库读写性能的要求往往成为非常大的挑战。在这种情况下我们能够考虑数据库相关的replication机制提高读写的性能。因为一般采用一写多读的replication机制(写master同步到多个slaves),导致这种机制往往会有缺陷。首先它依赖于读写的比例,假设写的操作过多,导致master往往成为性能的瓶颈所在,从而使得slaves的数据同步延迟也变大,进而大大消耗CPU的资源,而且导致数据的不一致从而影响到用户的体验。

        这个时候我们就要考虑使用数据库的sharding(分片)机制,这里面我们所说sharding机制并非一个数据库软件的附属功能,而是一种相对简朴的软件理念。

    一般我们把sharding机制分成水平扩展(横向扩展,或者向外扩展)和垂直扩展两种方式。

    详细什么是数据库的水平扩展和垂直扩展呢?我们以以下的样例来说明。

    比方我们如今有两个表:用户信息表 产品订单表

    水平的拆分的方案,即不改动数据库表结构。通过对表中数据的拆分而达到分片的目的:

    1)使用用户id做hash,分解数据库,在訪问数据库的使用用户id做路由。

    2)将产品订单表依照已下单和未下单区分成两个表。

       一般水平拆分在查询数据库的时候可能会用到union操作。 

    垂直拆分的方案:将表和表分离,或者改动表结构,依照訪问的差异将某些列拆分出去。

    1)将用户信息表放到一个数据库server,将产品订单表放到一个数据库server。

    2)将用户信息表中主码(通常是user id)和一些经常使用的信息放到一个表,将主码和不经常使用的信息放到另外的表。这导致一般查询数据的时候可能会用到join操作。

    在数据库的设计中,我们更关注数据库的水平扩展的能力。

    展开全文
  • 数据库水平扩展与垂直扩展 在互联网应用中。数据库经常是我们存储和訪问数据的经常使用介质。随着负载的增大,对数据库读写性能的要求往往成为非常大的挑战。在这种情况下我们能够考虑数据库相关的replication机制...

    数据库水平扩展与垂直扩展

              在互联网应用中。数据库经常是我们存储和訪问数据的经常使用介质。随着负载的增大,对数据库读写性能的要求往往成为非常大的挑战。在这种情况下我们能够考虑数据库相关的replication机制提高读写的性能。因为一般採用一写多读的replication机制(写master同步到多个slaves),导致这种机制往往会有缺陷。首先它依赖于读写的比例,假设写的操作过多,导致master往往成为性能的瓶颈所在,从而使得slaves的数据同步延迟也变大,进而大大消耗CPU的资源,而且导致数据的不一致从而影响到用户的体验。

           这个时候我们就要考虑使用数据库的sharding(分片)机制,这里面我们所说sharding机制并非一个数据库软件的附属功能,而是一种相对简朴的软件理念。

    一般我们把sharding机制分成水平扩展(横向扩展,或者向外扩展)和垂直扩展两种方式。

    详细什么是数据库的水平扩展和垂直扩展呢?我们以以下的样例来说明。

           比方我们如今有两个表:用户信息表 产品订单表

           水平的拆分的方案,即不改动数据库表结构。通过对表中数据的拆分而达到分片的目的:

    1)使用用户id做hash,分解数据库,在訪问数据库的使用用户id做路由。

    2)将产品订单表依照已下单和未下单区分成两个表。

           一般水平拆分在查询数据库的时候可能会用到union操作。

     

    垂直拆分的方案:将表和表分离,或者改动表结构,依照訪问的差异将某些列拆分出去。

             1)将用户信息表放到一个数据库server,将产品订单表放到一个数据库server。

             2)将用户信息表中主码(通常是user id)和一些经常使用的信息放到一个表,将主码和不经常使用的信息放到另外的表。这导致一般查询数据的时候可能会用到join操作。

    在数据库的设计中,我们更关注数据库的水平扩展的能力。

    转载于:https://www.cnblogs.com/blfshiye/p/5059748.html

    展开全文
  • 传统master—slaves模式中master性能会成为瓶颈,使用将数据库的“分片”概念来...垂直拆分 即将表和表分离,或者修改表结构,按照访问的差异将某些列拆分出去。 1)将用户信息表放到一个数据库server,将产品订单表放
  • (1)水平拆分和垂直拆分都是降低数据量大小,提升数据库性能的常见手段 (2)流量大,数据量大时,数据访问要有service层,并且service层不要通过join来获取主表和扩展表的属性 (3)垂直拆分的依据,尽量把长度较...
  • 数据库分表分库原则中,遵循两个设计原则:垂直拆分和水平拆分。 垂直拆分 解释 就是把不同的表拆到不通的数据库中。按照业务将表进行分类,分布到不同的数据库上,专库专用,这样的也就把数据压力分到到不通...
  • 数据库垂直和水平切分

    千次阅读 2017-09-18 22:56:28
    通过MySQLReplication功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈。这时候,我们就必须许找其他技术手段来解决这...
  • MySQL数据库垂直和水平切分

    千次阅读 2013-12-20 11:15:16
    replication的限制:一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈。数据切分(sharding):通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个...
  • 数据库扩展可以简单分为两类:向上扩展和横向扩展(水平扩展)。向上扩展是提高硬件,横向扩展是通过副本(读写分离)、垂直切分和水平切分的方式,把不同的数据放在不同的节点(物理部署的MySQL实例)中。 2....
  • 垂直扩展和水平扩展

    2020-05-01 22:30:21
    垂直扩展的应用场景,可以是关系型数据库,如oracle,sql server,本质上都是单机版的数据库,数据量增大以后,访问速度变慢,这时换一台更强的服务器。 水平扩展则可以对应分布式数据库,负载均衡,...
  • 数据库扩展顺序

    2017-09-02 22:55:00
    1、单机。索引优化、SQL优化   ...2、主主复制,负载均衡 ...4、垂直拆分。业务逻辑拆分,分布式部署   5、水平拆分   转载于:https://www.cnblogs.com/song-wentao/p/7468249.html...
  • DolphinDB既支持水平扩展,即增加节点,也支持垂直扩展,即增加节点的存储。 在扩展集群前,需要对DolphinDB集群有基本的概念。DolphinDB集群由3个角色组成:控制节点(Controller)、代理节点(Agent)和数据节点...
  • MySQL数据库扩展

    2011-11-18 09:20:55
    很多大规模的站点基本上都经历了从简单主从复制到垂直分区,再到水平分区的步骤,这是一个必然的成长过程。 1 主从复制、读写分离(R/W Splitting) 将应用程序中对数据库的写操作指向主服务器,而将读...
  • 比如淘宝中期开始的数据库端按照业务垂直拆分:按照业务交易数据库、用户数据库、商品数据库、店铺数据库等进行拆分。 采用垂直拆分优点:1. 拆分后业务清晰,拆分规则明确。2. 系统之间整合或扩展容易。3. 数据...
  • MySQL数据库扩展小记

    2012-03-05 08:25:01
    MySQL数据库扩展小记 分类: 负载均衡 架构设计2011-11-17 14:29 378人阅读 评论(0) 收藏 举报 很多大规模的站点基本上都经历了从简单主从复制到垂直分区,再到水平分区的步骤,这是一个必然的成长...
  • 垂直分表:通俗的说法叫做“大表拆小表”,拆分是基于关系型数据库中的“列”(字段)进行的。通常情况,某个表中的字段比较多,可以新建立一张“扩展表”,将不经常使用或者长度较大的字段拆分出去放到“扩展表”中...
  • scale up:向上扩展,垂直扩展使用更高性能的硬件来扩展 scale out:向外扩展,水平扩展提供更多的节点来提供更多的访问需求 复制:水平扩展的一种方案 如果构建一个httpd负载均衡集群会面临的问题: ...
  • 当单机数据库遇到瓶颈后,我们最...垂直拆分就是把一个数据库的不同业务单元的数据分到不同数据库中。二、优缺点优点:拆分后业务清晰,拆分规则明确。系统之间整合或扩展容易。数据维护简单。缺点:部分业务表无法j...
  • 通过MySQLReplication功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈。这时候,我们就必须许找其他技术手段来解决这...
  • 读写分离随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状。读写分离现在被大量应用于很多大型网站,...
  • 数据库读写分离和垂直分库、水平分表 随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状。读写...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 653
精华内容 261
热门标签
关键字:

数据库垂直扩展