如何选型业务扩展模式以应对未来需求增长?

摘要:业务发展过程中,增加字段是很常见、频繁的,因此怎么存储新增的字段是要重点考虑的因素。下面结合笔者的经验,总结一下各种业务扩展模式选型的优缺点、适用场景,如何让系统保持良好的业务扩展性。
业务发展过程中,增加字段是很常见、频繁的,因此怎么存储新增的字段是要重点考虑的因素。下面结合笔者的经验,总结一下各种业务扩展模式选型的优缺点、适用场景,如何让系统保持良好的业务扩展性。 方案选项 1. 最朴素方案:MySQL表直接加字段 实现: 在表中新增字段(ALTER TABLE ... ADD COLUMN ...)。 优点: 简单直接,快速迭代 缺点: 需要频繁修改表结构 字段膨胀导致表臃肿,索引效率下降(mysql单行记录有大小上限,65535字节;特别地,TEXT、BLOB另外分开存储,占9到12字节) 适用场景: 业务初期频繁加字段 或该字段为通用字段,适用于所有记录 2. 按业务领域聚合字段(增量更新) 实现: 将新增字段按业务域划分,比如业务一的信息都放到field_1,业务二的信息都放到field_2,每个字段是json格式、方便后续扩展。 优点: 业务聚合:相同业务领域信息存在一个字段内,无需每次DDL新增字段 缺点: 每次更新都要先查DB的值,merge本次变更后再写入DB 需做好并发控制,否则可能丢失变更内容(可通过乐观锁、或悲观锁控制,取决于并发程度) 仍然存在mysql单行大小限制 适用场景: 小型项目,不做推荐 3. 按业务领域垂直拆表 实现: 相近业务领域的字段,做垂直分表(如拆为订单信息表order_info、订单支付表order_payment、订单物流表order_logistics)。 优点: 彻底解耦业务域,各表独立演进 按需查表,提升查询性能 缺点: 每个垂直分表仍是在表内新增字段 业务扩展的难易程度,取决于垂直拆分得是否合理 适用场景: 业务模式已经稳定 或业务边界清晰的项目 4. 主表 + 动态扩展表(通过业务ID关联) 实现: 主表:存储核心字段(如业务ID、其它通用关键字段) 动态扩展表:存储动态扩展字段,与主表通过业务id关联。包括扩展key、扩展value(可以是json格式,方便后续扩展) 每次新增字段:(1)新增一个扩展key,在扩展value里存储内容;(2)或在已有扩展key的value中新增字段。 之所以通过动态扩展表来实现,是因为很多字段并非通用的,而仅针对部分记录。
阅读全文