• hjr-大数据 关于分库分表


    分类

    一般对于大数据有两种优化方式

    第一 使用大数据数据库
    第二 非大数据数据库的分库分表,单表数据限制1kw以内

    分库分表

    本节先介绍一下分库分表的思路
    对于toB系统来说,
    首先根据数据类型分,一般我们分为操作人员手动操作的业务数据,自动上报的事件数据
    对与toC系统来说,可以把大量用户的操作或者各处埋点采集的数据类比为toB系统的终端上报数据

    所以无论是toB系统还是toC系统,一般我们可以把数据分为,少量的手动操作的业务数据,和大量的终端上报或用户操作的日志数据

    由于本人做的多数是toB的项目,大数据主要来源于终端采集,因此下面主要以此举例

    举例

    分库

    水平拆分

    同一个表的数据根据id放到字段相同的其他库里的表,缺点是分页查询不方便

    可以根据id均匀分布拆分(均匀降低压力),也可以根据前多少条数据放到a库,多少条后放到b库拆分(热点数据分离)

    垂直拆分(优先)

    不同表放不同数据库,缺点是多表聚合查询不方便

    一般终端上报的日志数据是要先进入数据湖的,ETL清洗后一些事件数据会在业务系统中查询,这种数据一般都需要各种聚合和统计。

    此处我们可以把事件数据单独存储到一个Mysql数据库,系统的如用户、菜单、角色等业务数据单独放一个数据库,两种类型的数据做分库,降低事件数据占满线程池,占满磁盘导致对业务数据的影响

    读写分离

    虽然我们的事件数据已经单独存储到了一个数据库,不会对业务数据造成影响,但是当数据量大了之后,我们要对查询速度进行优化,因为连接池是很珍稀的资源,每个查和写都会占用一个连接数,
    因此可以把事件数据库加一个从库,做主从同步,一个负责读,一个负责写入

    分表

    水平拆分

    同一个表的数据根据id放到字段相同的其他表,缺点是分页查询不方便

    拆分的目的是为了保障单表数据量低于1kw。

    垂直拆分(优先)

    同一个表,某些字段单独建一张表,和主表一对一

    比如事件数据和事件详情数据,没必要把详情数据都放到事件表,因为一般用户操作是先点击查看事件列表,然后再点击查看事件详情。

    问题

    水平拆分的分库和分表的区别?
    分库是为了降低数据库的单点压力,降低数据库连接池压力
    分表是为了降低单表数据量检索的压力

  • 相关阅读:
    找到matplotlib的字体储存位置
    【C++】C++的类型转换
    FPC柔性电路板介绍及PCB设计经验规则总结
    产品经理技术脑:MySQL
    guzzle http/guzzle如何在鉴权中使用,如何使用异步操作?
    Debezium系列之:安装部署debezium2.0以上版本的详细步骤
    【恒源智享云】conda虚拟环境的操作指令
    Appium学习日记(一)——Appium工作原理及其主要组件
    python+pytest接口自动化之cookie绕过登录(保持登录状态)
    探究eFuse:硬件保障与系统安全的核心
  • 原文地址:https://blog.csdn.net/hjrcrj/article/details/126060372