爱陪小樱桃

导航

 

对于亿级别的表:如何扩字段,不是简简单单的ALTER...TABLE这么简单呢。
锁表风险,页分裂,索引性能衰减少,每一个问题都可能引发线上的事故,如何在不影响业务的情况,只是简单的配置,就可以实现字段的动态扩展?

对于大表不能随意的加字段

在加字段过程中,锁表问题,后续随着字段的和数据的不断增多,还会引发MySql的页分裂,碎片化,索引性能衰减等一系列问题。

:如何处理这个问题呢?

1.扩展字段,

1.不可索引:extend字段无法创建索引进行检索,mysql5.7.8版本支持json数据类型,可以为扩展字段中的某一个或者部分字段建立索引,是的没有错,但是如果是老版本就不能了,mysql也不会想升级就升级的,很可能有问题的。
2.并发覆盖
3.重复工作

扩展表

就是把表里面字段,转换为行,放到另一个表里面
这个在很大程度上缓解了并发问题,由于扩展数据不在主表里面存储了,也缓解了主表的压力,但是也引入了新问题:本来一条记录的许多属性,变成了多条记录,行数成倍增加,基于这样我们会分库分表,这个方案貌似解决了扩展字段方案的大部分问题,可索引,没有并发覆盖的问题,不影响主表性能,但是还是没有解决字段维护的问题,

场景1:
有些业务希望将数据存储在订单中后台,在订单的后续某个节点传递给下游:
场景2:
有些业务希望扩展字段中的某个字段与主表上的某些字段一起进行检索。

所以:需要动态扩展的愿景:需要把系统拆分三部分:数据管理,数据存储,数据检索,
数据管理部分:
1.数据管理主要管理动态字段的准入,接口透传信息,检索要求归属以及其他的基本信息。
数据存储部分:
1.数据存储的核心:采用扩展表的方案,
数据检索部分:
1.数据检索采用:ES集群及自研ES管理系统ECP;

有了管理系统:字段的归属,作用域都非常的清晰,不在是一个黑盒,生效状态也可以标记,被标记失效的字段后续可以下线。

对于场景1:
业务可以通过下单接口,(或者其他节点接口)传入订单系统,并保存到数据库,当订单流转到对应节点,需要调用相关接口时,会检查参数透传信息,搜集需要透传到当前接口的所有参数数据,然后根据参数路径,将之前保存的值设置到对应请求参数中透传下去。
对于场景2:
可以借助ES,规避连接表查询,通过ES合并主表和扩展表。

因此:业务方提出新增加字段的诉求的时候,只需要子啊数据管理后台进行配置上线,使用者即可通过指定接口,或者接口的指定参数将数据传入,实现数据的存储,传递,检索能力,全程无序开发。

在大量数据表上扩展字段,是灵活和稳定性的博弈,既要保证业务又要避免野蛮生长带来的问题,因此我们将核心数据和扩展数据分离,在数据上:我们对数据管理,存储,检索进行解耦,

posted on 2025-08-13 21:21  cherry小樱桃  阅读(21)  评论(0)    收藏  举报