【用户实体】

将模型分布式放到多个gpu中_分区表

【如何把用户属性存到表中?——不合理做法】

将模型分布式放到多个gpu中_分区表_02

优点:易于数据存取

缺点:数据存在冗余   数据表过宽,会影响修改表结构

 

[ 数据库设计范式 ]

  设计范式是数据库设计的规范,有第一、第二、第三范式。

  数据库设计最低要满足第三范式的要求。

[ 第三范式(3NF) ]

  一个表中的列和其他列之间既不包含部分函数依赖关系,也不包含传递函数依赖关系,那么这个表的设计就符合第三范式。

 

【优化方案】

将模型分布式放到多个gpu中_分区表_03

[ 尽量做到冷热数据分离,减小表的宽度 ] 

将模型分布式放到多个gpu中_数据库_04

[ 用户登录表 ]

将模型分布式放到多个gpu中_数据库_05

将模型分布式放到多个gpu中_分区表_06

将模型分布式放到多个gpu中_数据_07

将模型分布式放到多个gpu中_将模型分布式放到多个gpu中_08

将模型分布式放到多个gpu中_数据库_09

将模型分布式放到多个gpu中_将模型分布式放到多个gpu中_10

将模型分布式放到多个gpu中_数据_11

 

【MySql分区表】

确认MySql服务器是否支持分区表

  SHOW PLUGINS;

将模型分布式放到多个gpu中_将模型分布式放到多个gpu中_12

【HASH分区】

将模型分布式放到多个gpu中_将模型分布式放到多个gpu中_13

[ 分区表存储的文件 ]

 

将模型分布式放到多个gpu中_将模型分布式放到多个gpu中_14

[ 非分区表存储的文件 ]

将模型分布式放到多个gpu中_三范式_15

 【HASH分区的特点】

  根据MOD(分区键、分区数)的值把数据行存储到不同的分区中。

  数据可以平均地分布到各个分区中。

  HASH分区的键值必须是一个INT类型的值,或者是通过函数可以转换为INT类型。

 

将模型分布式放到多个gpu中_将模型分布式放到多个gpu中_16

建立HASH分区可使用的一些函数

将模型分布式放到多个gpu中_数据库_17

 

【按范围分区(RANGE)】

[ RANGE分区的特点 ]

根据分区键值的范围把数据行存储到表的不同分区中。

多个分区的范围要连续,但是不能重叠。

默认情况下使用VALUES LESS THAN属性,即每个分区不包括指定的那个值。

将模型分布式放到多个gpu中_分区表_18

如果没有 >30000 的那条语句,一旦数据过大会导致这个错误:

将模型分布式放到多个gpu中_三范式_19

[ 按范围分区的适用场景 ]

  分区键为时间或者时间类型。

  所有查询中都包括分区键。

    定期按分区范围清理历史数据。

 

【LIST分区】

[ LIST分区的特点 ]

  按分区键取值的列表进行分区。

  同范围分区一样,各分区的列表值不能重复。

  每一行数据必须能找到对应的分区列表,否则插入失败。

[ 如何建立LIST分区 ]

将模型分布式放到多个gpu中_分区表_20

将模型分布式放到多个gpu中_将模型分布式放到多个gpu中_21

 

 

【 如何为customer_login_log表分区 】

[ 业务场景 ]

  用户每次登录都会记录customer_login_log日志

  用户登录日志保存一年,一年后删除。

[ 选择哪种分区类型? ]

  使用RANGE分区

  以login_time作为分区键

[ 分区后的用户登录日志表 ]

将模型分布式放到多个gpu中_数据_22

 

【使用分区表的注意事项】

结合业务场景选择分区键,避免跨分区查询。

对分区表进行查询最好在WHERE从句中包含分区键。

具有主键或唯一索引的表,主键或唯一索引必须是分区键的一部分。