业务需求与现状
- 大数据量的表,如几千万条记录
- 业务需求,在该表加字段,实际业务用不到,仅统计时需要用;而且时不时的会有不同的这种字段需求添加;实际上可以跨库去取的字段,但是统计侧存在跨库不方便的情况,只能扩展添加字段。
问题
大数据量的表,执行ddl,alert列时会有锁表的问题。
思路1:采用json存储
- 问题:varchar(255),存储的字符串长度也有限,存json字符串的话,字段也有限;如果是Text会占用数据库空间太多的问题;
- 好处:可读清晰,容易扩展
- 缺点:占用空间大,效率低
思路2: 采用二进制存储
BIT(64)最多64位,tinyblob的话应该更多(好像用于位运算很繁琐)
2.1
如第一位用来存储,是否单抽/十抽
后续如果有新的类型加入,比如五抽, 可以继续约定第x位为改类型的字段
2.2
最好还是预留一些位,方便扩展,连续的位计算更方便,但是总会存在超过预留位的场景
2.3
N+1位,固定的一位用于扩展;如果是0,用后面的N位;如果是1,表示是超过当前设计的位范围了,去一个新增的数据库查询
- 好处:位运算执行效率高,节省空间
- 坏处:可读性不强; 扩展差; 64位用完后还得继续增加新字段;
思路3: 引入列存储如MangoDb
列存储适合这种场景,具体待研究
思路4: 表垂直拆分
将不用的字段拆分出来,改动也挺大,增加字段依然存在问题