分库分表怎样分?「建议收藏」

分库分表怎样分?「建议收藏」数据库的数据量达到一定程度之后,为避免带来系统性能上的瓶颈,需要进行数据的处理,采用的手段是分区、分片、分库、分表。 1)分库 业务拆分 – 如顾客,商品,订单各自分独立的库 主备 – 主机做读写,…

分库分表怎样分?

1)分库
    业务拆分 – 如顾客,商品,订单各自分独立的库
    主备 – 主机做读写,备机只做数据备份
    主从(读写分离) – 主机写,从机读
    主主 – 任意一台机做写,互相复制
    集群 – 一主多备、一主多从、多主多从,主机写,所有机都可以读

1)分片(类似分库)
  分片是把数据库横向扩展(Scale Out)到多个物理节点上的一种有效的方式,其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。
  Shard这个词的意思是“碎片”。
  如果将一个数据库当作一块大玻璃,将这块玻璃打碎,那么每一小块都称为数据库的碎片(DatabaseShard)。
  将整个数据库打碎的过程就叫做分片,可以翻译为分片。
  形式上,分片可以简单定义为将大数据库分布到多个物理节点上的一个分区方案。每一个分区包含数据库的某一部分,称为一个片,分区方式可以是任意的,并不局限于传统的水平分区和垂直分区。
  一个分片可以包含多个表的内容甚至可以包含多个数据库实例中的内容。每个分片被放置在一个数据库服务器上。
  一个数据库服务器可以处理一个或多个分片的数据。
  系统中需要有服务器进行查询路由转发,负责将查询转发到包含该查询所访问数据的分片或分片集合节点上去执行。

2)分表
  分表从表面意思说就是把一张表分成多个小表。
  1)垂直分表 – 列数太多的大表分成多张表,分后表的结构变了,列数变少,表保存数据的行数不变
  2)水平分表 – 表保存数据的行数太多的表分到多张表去保存,分后表的结构不变,表保存数据的行数变少。
  分区和分表的区别与联系
    分区和分表的目的都是减少数据库的负担,提高表的增删改查效率。
    分区只是一张表中的数据的存储位置发生改变,分表是将一张表分成多张表。
    当访问量大,且表数据比较大时,两种方式可以互相配合使用。
    当访问量不大,但表数据比较多时,可以只进行分区。
  常见分区分表的规则策略(类似)
    Range(范围)
    Hash(哈希)
    按照时间拆分
    Hash之后按照分表个数取模
    在认证库中保存数据库配置,就是建立一个DB,这个DB单独保存user_id到DB的映射关系
  
3)分区
  数据分区是一种物理数据库的设计技术,它的目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。
  分区并不是生成新的数据表,而是将表的数据均衡分摊到不同的硬盘,系统或是不同服务器存储介子中,实际上还是一张表。
  另外,分区可以做到将表的数据均衡到不同的地方,提高数据检索的效率,降低数据库的频繁IO压力值,分区的优点如下:
  相对于单个文件系统或是硬盘,分区可以存储更多的数据;
    数据管理比较方便,比如要清理或废弃某年的数据,就可以直接删除该日期的分区数据即可;
    精准定位分区查询数据,不需要全表扫描查询,大大提高数据检索效率;
    可跨多个分区磁盘查询,来提高查询的吞吐量;
    在涉及聚合函数查询时,可以很容易进行数据的合并;
  mysql5 开始支持分区功能

  CREATE TABLE sales (
      id INT AUTO_INCREMENT,
      amount DOUBLE NOT NULL,
      order_day DATETIME NOT NULL,
      PRIMARY KEY(id, order_day)
  ) ENGINE=Innodb 
  PARTITION BY RANGE(YEAR(order_day)) (
    PARTITION p_2010 VALUES LESS THAN (2010),
    PARTITION p_2011 VALUES LESS THAN (2011),
    PARTITION p_2012 VALUES LESS THAN (2012),
  PARTITION p_catchall VALUES LESS THAN MAXVALUE);

代码100分

常用分库分表中间件
  sharding-JDBC
  MyCAT
  Atlas

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8667.html

(0)
上一篇 2023-02-24
下一篇 2023-02-24

相关推荐

  • 提高效率的时间模块Python编程技巧

    提高效率的时间模块Python编程技巧计算机编程领域中,时间处理一直是一个很重要的任务。在Python编程中,提高时间处理的效率和精度是非常必要的,也是非常具有挑战性的。Python的时间模块是一个非常强大的工具,提供了许多函数和类,可以轻松地处理日期和时间的各种操作。这篇文章将分享一些提高时间模块Python编程效率的技巧,希望能够帮助读者提高编程效率,减少开发时间。

    2024-02-22
    105
  • 读者来信 | 如何判断HBase Major Compact是否执行完毕?(已解决)[亲测有效]

    读者来信 | 如何判断HBase Major Compact是否执行完毕?(已解决)[亲测有效]前言: 之前有朋友加好友与我探讨一些问题,我觉得这些问题倒挺有价值的;于是就想在本公众号开设一个问答专栏,方便技术交流与分享,专栏名就定为: 《读者来信》 。欢迎关注本人微信公众号《HBase工作笔记

    2023-02-15
    147
  • 走好数据中台最后一公里,为什么说数据服务API是数据中台的标配?「建议收藏」

    走好数据中台最后一公里,为什么说数据服务API是数据中台的标配?「建议收藏」一、课程介绍 数据服务API作为数据统一服务平台建设的最上层,能够将数据仓库数据以服务化、接口化的方式提供给数据使用方,屏蔽底层数据存储、计算的诸多细节,简化和加强数据的使用。 随着企业“互联网化、数

    2023-05-22
    149
  • SQL Server分组后拼接字符串「建议收藏」

    SQL Server分组后拼接字符串「建议收藏」相关示例代码 WITH sqlt AS (SELECT a.PlaceCode, b.AcupointName FROM ITEM_Place_Correlation a LEFT JOIN ITEM

    2023-05-20
    141
  • 学习Python编程入门指南

    学习Python编程入门指南Python已经成为一门非常流行的编程语言,在计算机编程领域中的应用越来越广泛。Python的语法简单,易学易懂,同时具有强大的编程能力,可以用于开发桌面应用、网络应用、数据库应用等等。本文介绍了Python编程入门指南,帮助读者学习Python编程语言,掌握Python的基础知识和编程技巧。

    2024-09-22
    12
  • 【mysql】向mysql数据库批量插入数据(循环)[通俗易懂]

    【mysql】向mysql数据库批量插入数据(循环)[通俗易懂]错误插入 delimiter $$ //以delimiter来标记用$表示存储过程结束 create procedure pre() //创建pre()存储方法 begin declare i in…

    2022-12-19
    146
  • Python List 插入元素的方法

    Python List 插入元素的方法执行以上代码可以得到输出结果:[1, ‘apple’, 2, 3]。在这个例子中,我们向一个包含三个元素的列表中插入一个字符串,并指定它的索引为1。注意,这里是将字符串插入到索引1的位置,原来处于该位置的元素以及后面的元素都会自动向后移动一个位置。

    2024-02-20
    99
  • StoneDB主从切换实践方案

    StoneDB主从切换实践方案StoneDB 的主从切换既可以手动切换,也可以自动切换,自动切换通常需要使用第三方中间件。本文介绍的是较为常用的中间件 Replication Manager,当 master 发生宕机时,可自动切

    2023-06-09
    148

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注