一般对于大数据有两种优化方式
第一 使用大数据数据库
第二 非大数据数据库的分库分表,单表数据限制1kw以内
本节先介绍一下分库分表的思路
对于toB系统来说,
首先根据数据类型分,一般我们分为操作人员手动操作的业务数据,自动上报的事件数据
对与toC系统来说,可以把大量用户的操作或者各处埋点采集的数据类比为toB系统的终端上报数据
所以无论是toB系统还是toC系统,一般我们可以把数据分为,少量的手动操作的业务数据,和大量的终端上报或用户操作的日志数据
由于本人做的多数是toB的项目,大数据主要来源于终端采集,因此下面主要以此举例
同一个表的数据根据id放到字段相同的其他库里的表,缺点是分页查询不方便
可以根据id均匀分布拆分(均匀降低压力),也可以根据前多少条数据放到a库,多少条后放到b库拆分(热点数据分离)
不同表放不同数据库,缺点是多表聚合查询不方便
一般终端上报的日志数据是要先进入数据湖的,ETL清洗后一些事件数据会在业务系统中查询,这种数据一般都需要各种聚合和统计。
此处我们可以把事件数据单独存储到一个Mysql数据库,系统的如用户、菜单、角色等业务数据单独放一个数据库,两种类型的数据做分库,降低事件数据占满线程池,占满磁盘导致对业务数据的影响
虽然我们的事件数据已经单独存储到了一个数据库,不会对业务数据造成影响,但是当数据量大了之后,我们要对查询速度进行优化,因为连接池是很珍稀的资源,每个查和写都会占用一个连接数,
因此可以把事件数据库加一个从库,做主从同步,一个负责读,一个负责写入
同一个表的数据根据id放到字段相同的其他表,缺点是分页查询不方便
拆分的目的是为了保障单表数据量低于1kw。
同一个表,某些字段单独建一张表,和主表一对一
比如事件数据和事件详情数据,没必要把详情数据都放到事件表,因为一般用户操作是先点击查看事件列表,然后再点击查看事件详情。
水平拆分的分库和分表的区别?
分库是为了降低数据库的单点压力,降低数据库连接池压力
分表是为了降低单表数据量检索的压力