啥,又要为表增加一列属性?

简介: 今天分享2个列扩展性设计上几个小技巧,只占大伙1分钟(下班太晚的话,只能写一分钟系列=_=)

需求缘起

产品第一版:用户有用户名、密码、昵称等三个属性,对应表设计:

user(uid, name, passwd, nick)

第二版,产品经理增加了年龄,性别两个属性,表结构可能要变成:

user(uid, name, passwd, nick, age, sex)

假设数据量和并发量比较大,怎么变?

(1)alter table add column?不太可行,锁表时间长

(2)新表+触发器?如果数据量太大,新表不一定装得下,何况触发器对数据库性能的影响比较高

(3)让dba来搞?新表,迁移数据,一致性校验,rename?dba真苦逼

今天分享2个列扩展性设计上几个小技巧,只占大伙1分钟(下班太晚的话,只能写一分钟系列

方案一:版本号+通用列

以上面的用户表为例,假设只有uid和name上有查询需求,表可以设计为

user(uid, name, version, ext)

(1)uid和name有查询需求,必须设计为单独的列并建立索引

(2)version是版本号字段,它对ext进行了版本解释

(3)ext采用可扩展的字符串协议载体,承载被查询的属性

例如,最开始上线的时候,版本为0,此时只有passwd和nick两个属性,那么数据为:

image.png

当产品经理需要扩展属性时,新数据将版本变为1,此时新增了age和sex两个数据,数据变为:
image.png

优点:

(1)可以随时动态扩展属性

(2)新旧两种数据可以同时存在

(3)迁移数据方便,写个小程序将旧版本ext的改为新版本的ext,并修改version

不足:

(1)ext里的字段无法建立索引

(2)ext里的key值有大量冗余,建议key短一些

改进:

(1)如果ext里的属性有索引需求,可能Nosql的如MongoDB会更适合

方案二:通过扩展行的方式来扩展属性

以上面的用户表为例,可以设计为

user(uid, key, value)

初期有name, passwd, nick三个属性,那么数据为:

image.png

未来扩展了age和sex两个属性,数据变为:

优点:
image.png

(1)可以随时动态扩展属性

(2)新旧两种数据可以同时存在

(3)迁移数据方便,写个小程序可以将新增的属性加上

(4)各个属性上都可以查询

不足:

(1)key值有大量冗余,建议key短一些

(2)本来一条记录很多属性,会变成多条记录,行数会增加很多

总结

可以通过“version+ext”或者“key+value”的方式来满足产品新增列的需求,希望没有浪费你这一分钟,有收获就好。

==【完】==

目录
相关文章
|
9月前
|
开发者
1688工厂信息接口指南
1688工厂信息接口用于获取供应商基础信息、生产能力及交易信用数据,支持供应链分析与评估。核心功能包括企业信息、生产能力、交易勋章、认证资料等。调用需申请接口权限,配置商品ID与返回字段。
|
数据采集 缓存 Java
Python vs Java:爬虫任务中的效率比较
Python vs Java:爬虫任务中的效率比较
|
10月前
抖音私信插件批量无限,导入UID抖音号群发私信,关注功能自带按键精灵
这是一款针对抖音主播的精准私信工具源码,适用于微商或化妆品销售者。通过模拟用户行为,自动向抖音主播发送私信,提升销售额。
|
虚拟化 iOS开发 MacOS
VMware ESXi 7.0U3r macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)
VMware ESXi 7.0U3r macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)
330 0
VMware ESXi 7.0U3r macOS Unlocker & OEM BIOS 2.7 集成网卡驱动和 NVMe 驱动 (集成驱动版)
|
安全 Windows
Windows提权/杀软进程在线对比
Windows提权/杀软进程在线对比
761 0
Windows提权/杀软进程在线对比
|
算法 Linux 调度
深入探索安卓系统的多任务处理机制
【10月更文挑战第21天】 本文旨在为读者提供一个关于Android系统多任务处理机制的全面解析。我们将从Android操作系统的核心架构出发,探讨其如何管理多个应用程序的同时运行,包括进程调度、内存管理和电量优化等方面。通过深入分析,本文揭示了Android在处理多任务时所面临的挑战以及它如何通过创新的解决方案来提高用户体验和设备性能。
909 1
|
监控 安全 网络安全
配置管理简介
配置管理简介
284 2
|
缓存 负载均衡 数据库
优化后端性能:提升Web应用响应速度的关键策略
在当今数字化时代,Web应用的性能对于用户体验至关重要。本文探讨了如何通过优化后端架构和技术手段,提升Web应用的响应速度。从数据库优化、缓存机制到异步处理等多个方面进行了深入分析,并提出了一系列实用的优化策略,以帮助开发者更好地应对日益增长的用户访问量和复杂的业务需求。
924 28
|
运维 前端开发 持续交付
利用Github Actions实现自动化部署
利用Github Actions实现自动化部署
|
人工智能 编解码 安全
【最新】Sora到底是什么?Sora详解:一文带你熟悉Sora
《Sora详解:一文带你熟悉Sora,以及Sora新手小白使用教程》是一篇深入介绍OpenAI最新文本生成视频大模型Sora的文章。它探讨了Sora的定义、功能和使用方法,为读者提供了全面了解和上手Sora的指南。这篇文章旨在帮助新手快速掌握Sora,并展示其在视频创作领域的潜力。
978 0
【最新】Sora到底是什么?Sora详解:一文带你熟悉Sora

热门文章

最新文章