无限容量数据库架构总结

本文是对58同城沈剑的文章二次整理,并结合自己的实践再加工得来。所以非常感谢沈剑。

一、引子

  • 故事:业务遇到了瓶颈,多张表每个月新增亿级数据,如何仍然保证高可用。
  • 开始:所有不与业务结合的架构都是耍流氓,针对具体场景进行分析得出具体方案。
  • 收集:所以先需要对所有数据库架构有所了解,才能比较。以下内容分为三个话题:
    1.  数据库架构
    2.  数据水平切分实践
    3.  迁移或者扩容方案

二、数据库架构

  1、单库方案

   2、分组架构:

    常见为一主多从、主从同步、读写分离架构;

    技术实现方式常见有数据库在线或者归档日志(oracle goldengate、mysql binlog)、ETL技术。

    适用于读多写少场景,用于解决读瓶颈;

  3、分片架构:分表、分区、分库。

    相同点:减少索引的B-树深度,所以提高了插入或者查询数据的效率;

    不同点:分表在同一个表空间,仍有IO竞争、分区支持不同表空间可改善IO竞争、分库可实现彻底物理隔离;

    分片常见算法有hash算法、范围算法、和复合算法(此外,还有列表分片);

    适用于数据库量过大的场景,一般建议数据量多大则分库,原因见上。

  4、分组+分片复合架构

    适用于读写量都巨大的场景。

  5、垂直切分

      包含垂直分表和垂直分表分库;

    需要考虑长度和访问频度,长度短、访问频度高的放在一起。例如用户表与用户扩展信息表。

    适用于业务字段较多、访问频度且不一致的场景,这样可以使得访问频度高的数据加载到内存,减少IO,加快访问速度。如果分库,还也可以降低单库容量。

三、数据库水平切分实践

  1、单key业务

    A、使用分片架构,详见2.3章节;

    B、单key衍生场景——

      A、用户多弱key业务,例如,:户登录,UID为key,后续业务都用UID处理。同时需要支持手机、身份证号等登录。

        (1)部分时候可参照多key场景

        (2)基本方案为:索引外置(索引表法、映射缓存法)和基因法(弱key内置key中,弱key的分片算法结果内置key中)

      B、运营侧业务,常见问题场景是批量分页或者统计查询

          (1)解耦:中间件、数据库、数据库表层解耦。

        (2)可以是插入时冗余一套数据,也可以使用ods库、或者索引外置的方案

  2、一对多业务

    A、切分方案,分库场景如下——

      外键分库,导致外联表分到不同库中,需要遍历库;主键分库,导致根据外键查询详细信息时,需要先反向查找主键定位库,可结合索引外置方案;基因法分库,目前最好的实践。

    B、衍生场景,分库后的弱key查询——

      元数据与索引数据分离:元数据用于满足key查询;索引数据用于根据弱key查找key,然后就能根据key找到对应库,并且根据key查询元数据。

  3、多对多业务

    A、基本思路:数据冗余方式分库

    B、实践方式:例如,A关注B,则为在关注表中,A关注了B,在被关注表中,B是A的粉丝。这样单个查询命中单库就能满足要求。

    C、关键点:数据存储多份要保证(最终)一致性。

  4、多key业务

    A、基本思路:通过冗余的方式来降维,通过降维来用低维度的手段解决问题;

    B、实践方式:例如订单关系中的客户与商家,则为客户存储订单信息,变为一对多;也为商家存储订单信息,变为一对多;实践中有时是变为多对多。

    C、关键点:数据存储多份要保证(最终)一致性。

四、迁移或者扩容方案

  迁移和扩容是两个不同的事件,有时扩容伴随着迁移。

  •   迁移方案:

    • 全量迁移+停机增量迁移:停机是为了保证不会在迁移期间产生新的增量数据;
    • 双写法(非停机)迁移:旧库修改变为新旧库同时修改,在此期间迁移数据到新库,最终对比数据,然后切换过去。
  •   扩容方案:

    • 全量迁移+停机增量迁移
    • 双主同步方案(完美方案)——

      (1)假设,现在有A/B两台,%2=0路由到A,%2=1路由到B

      (2)现在为AB建立双主同步库,A对应C、B对应D

      (3)修改配置项建立新的链接,%4=0对应A、%4=1对应B、%4=2对应C、%4=3对应D

      (4)撤销双主,A与C、B与D不再建立关系

      (5)数据缩容:例如将A中%4=2的全部干掉,C中%4=0的全部干掉。完美结束。

  • 数据迁移的效率:

    大表迁移数据的几种有效方式——

    新表不建立索引,迁移完成再建立索引。有实践为证,亿级表无索引迁移需要约10分钟,有索引迁移约需要50个小时;

    hint语句:加上append、nologging、parallel等能极大优化效率;

    如果是分区表,可单张分区表独立迁移。

  

    

    

        

  

    

    

  

时间: 2024-07-30 21:53:51

无限容量数据库架构总结的相关文章

数据库架构的演变

 如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 最近看了很多公司架构的演变的文章,发现其中的基本思路和架构演变都很类似,这里也总结一下数据库架构的演变以及演变背后的思路. 单主机 最开始网站一般都是由典型的LAMP架构演变而来的,一般都是一台linux主机,一台apache服务器,php执行环境以及mysql服务器,一般情况下,这些都在一台虚拟主机上,简称单主机模式. 单主机模式缺点: 1 web服务器和mysql服务器公用一台主机

直播平台的数据库架构演变

8月24日,阿里云数据库技术峰会到来,本次技术峰会邀请到了阿里集团和阿里云数据库老司机们,为大家分享了一线数据库实践经验和技术干货.在本次峰会上,特邀嘉宾映客直播架构师王振涛分享了映客直播作为创业公司从0至日活千万的数据库架构变迁,数据库在直播中的经典应用场景,数据库存储的优化思路,以及如何构建一个高可用数据库架构. 以下内容根据演讲嘉宾现场视频以及PPT整理而成. 本次分享的内容将主要围绕以下四个部分: 一.映客直播发展历程 二.直播遇上云数据库 三.风口上的数据库架构变迁 四.直播典型应用场

多数据中心的高可用结构【环状星型数据库架构】

贴一些比较老的内容,文章是新写的,技术可能都是大家熟悉的,给入门的兄弟们参考.高手轻拍原文请见:http://www.muduo.net/index.php/u ... space-itemid-318728 二.多数据中心的高可用结构[环状星型数据库架构]在介绍该结构之前,我们首先了解一下mysql复制的有关内容.在<highperformance mysql>的第一版中,作者介绍了这样的一种数据库结构:                              三个mysql的daemon

云数据库架构演进与实践

  如今,大型企业如金融企业和银行等,在下一代的微服务架构转型要求下,需要基础软件和数据平台能够实现原生的云化,以满足微服务架构的需求. 微服务,也就是一种面向服务的,有特定边界的松散耦合的架构. 主要特点包括,每一个微服务是一个独立的自治系统,可以不依赖外部组件独立运行:对应用只暴露接口,用户可以灵活的调整过每个微服务的使用:业务粒度足够小. 在企业架构"云化"的过程中,数据库的云化是最为重要也是难度较大的一个部分.数据库云平台(dbPaaS)是一类支持弹性扩张.多租户.自我管理.并

数据库架构实践

数据库架构最佳实践可参考:http://blog.csdn.net/zdy0_2004/article/details/50565117

EF6 Code First 模式更新数据库架构

定义好实体类和上下文类 在 Package Manager Console 输入以下命令 1.Enable-Migrations 启用数据迁移功能,该命令通常会在项目根目录下生成 Migrations 文件夹,文件夹内通常会有两个文件 201408020650593_InitialCreate.cs -- 迁移前的数据结构,前半段为时间戳 Configuration.cs -- 相关配置,是否需要自动迁移等,默认为 false 2.Add-Migration 增加迁移点,输入该命令后会要求你输入

怎样在SharePoint管理中心检查数据库架构版本号、修补级别和修补程序的常规监控

怎样在SharePoint管理中心检查数据库架构版本号.修补级别和修补程序的常规监控 准备: 确保你是可以訪问管理中心的场管理员. 開始: 1. 打开管理中心--升级和迁移. 2. 点击"查看产品和修补程序的安装状态". 3. 顶部有个下拉列表同意你选择查看整个场还是只特定server上的部件. 4. 回到升级和迁移--查看数据库状态.场的全部数据库和状态显示出来. 5. 导航到应用程序管理--数据库--管理内容数据库. 6. 点击一个内容数据库,第二部分是数据库版本号和升级.它描写叙

java架构师课程、性能调优、高并发、tomcat负载均衡、大型电商项目实战、高可用、高可扩展、数据库架构设计、Solr集群与应用、分布式实战、主从复制、高可用集群、大数据

15套Java架构师详情 * { font-family: "Microsoft YaHei" !important } h1 { background-color: #006; color: #FF0 } 15套java架构师.集群.高可用.高可扩展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布式项目实战视频教程 视频课程包含: 高级Java架构师包含:Spring boot.Spring  clo

淘宝网系统架构分析以及数据库架构简介

一个成熟的大型网站(如淘宝.京东等)的系统架构需要考虑诸多复杂的因素,因为像淘宝这种大型网站数据量比一般的网站要大的多,所以在设计架构方面也要复杂的多,既要考虑成本因素也要考虑访问速度安全性等.这里我简单的对淘宝的网站系统架构进行一个简单的分析. 淘宝作为一个大型购物网站,其数据量是很大的,所以不像一般网站,淘宝需要用各种方法来保证服务器的正常运行以及用户购买时的良好体验.主要由以下方式:1.应用.数据.文件分离 2.利用缓存改善网站性能 3.使用CDN和反向代理提高访问速度 4.使用分布式文件