当一个表的数据量过大,引起存储不够或者查询较慢问题时,应该怎么办?
纵向切分表
将一个表按照字段切分成两个或者多个表,将常用的字段切分到一张表中,分布式存储
横向切分
有两种方式,一是按照特定的数据量,将表切分成不同的表(表结构一致)来存储,新数据插入到新表中,新表的数据量达到约定拆分的数据量时,再建立新表存储;二是按照某种特定的规则来切分表,然后分布式存储,如按照不同的模块分类来切分表。
第二种方式要注意防止主键冲突,通常采用snowflake-64bit算法即:
但是也存在隐患,snowflake产生的id是有可能重复的,机器id和序列号可以做到不重复,但是同一台上的时间戳不能保证不重复,如网络延迟、抖动,这是个无解的问题