zoukankan      html  css  js  c++  java
  • 【图灵学院02】大型互联网技术之数据库分库分表

    1. 介绍原理

    1.1 数据库介绍

    Oracle:

    Oracle很强大,一台还是满足不了现有的一个业务、多台Oracle费用,国美一年给甲骨文500多万。

    MySQL:免费、广泛(oracle收购)

    1.2 集群

    集群:并发问题?服务高可用、分组

    mysql-proxy官方: 读写分离。解决了高并发,没解决高可用,存在单点问题

    1.3 分库分表:

    1.3.1 类型:水平、垂直

    1.3.2 垂直:

    将一个属性比较多、行的数据比较大的表、把这个表的不同属性拆分成不同表、方式来降低单库(表)大小的目的来提高性能

    总结特点:

    1)每个库(表)的结构都不一样

    2)每个库(表)的数据都(至少有一列)一样

    3)每个库(表)的并集是全量数据

    1.3.3 水平:

    以某个字段按照一定的规律(取模)将一个表的数据分割到多个库(表)

    总结特点:

    1)每个库(表)的结构都一样

    2)每个库(表)的数据都不一样

    3)每个库(表)的并集是全量数据

    1.3.4 分库策略

    Hash取模,通过表的一列字段进行hash,取code % 1024

    Range范围区分:2016年 A库,2017 B库

    List预定义:分布式订单生成策略,100库全局ID生成

    1.3.5 分库分表之后的问题

    多数据源管理(proxy)

    跨库事务处理(避免XA 2pc 伸缩性差)TCC柔弱性事务

    查询数据的结果集合并(改写)

    分布式全局唯一ID(解决问题)

    遵循ACID前提下提高我们的并行能力

    2. 实战分库

    水平拆分:

    路由算法、一致性Hash

    hash(userid) = hashcode % 1024 = 777

    扩容问题:

    2.1 案例

    1)有6个库

    2)数据存到6个库中

    3)可以支持多台mysql数据源

    4)监控mysql状态、实现master/slave自动切换

    5)水平拆分、分表散列

  • 相关阅读:
    Linux查看文件夹大小
    mysql按照天或小时group分组统计
    eclipse可以调试但是无法打开网页,提示一直在加载
    自定义spring valid方式实现验证
    UniCode编码表及部分不可见字符过滤方案
    shiro中移除jsessionid的解决方案
    Apache Shiro去掉URL中的JSESSIONID
    shiro开启realm
    shiro注解@RequiresPermissions多权限任选一参数用法
    linux 复制粘贴
  • 原文地址:https://www.cnblogs.com/yeahwell/p/7624914.html
Copyright © 2011-2022 走看看