业务快速迭代需要修改数据库表结构,有办法能避免服务频繁重启吗?

2022-04-24 04:35:45 +08:00
 LeeReamond

非微服务架构,没有那么庞大的需求。但是这个需求在设计上需要经常修改表结构,比如商品对象未来可能会不断新增一些附加属性(假设目前每行需要保存对象的文件地址、文件大小、修改时间等等,未来可能会根据需求不断新增作者 id ,作者备注等等,大概类似这种情况)

在这个需求下最初建表的时候不可能设计出未来所有可能出现的项目,而每次新增项目都要调整表结构,这又涉及到服务重启,还有如果有正在处理的链接那表还有上锁的等等问题。。有什么设计上的经验可以比较好的处理,避免各种凌晨三点维护重启服务的情况吗?

========

目前想到一种方法是专门搞一个追加项目表,里面一共四项,分别是(追加项目 id ,链接的原始项目 id ,追加项目名称,追加项目内容)。但是这么搞的话随着数据量无限增大,感觉处理读取需求时系统会被拖到非常慢,不是一个可行的方案。

1524 次点击
所在节点    问与答
14 条回复
AS4694lAS4808
2022-04-24 07:38:25 +08:00
数据库改了对应的代码也改了吧?那不是需要重启服务部署吗。。?还是要动态的读取数据库列?然后把读出来的列名直接显示为数据的名称?
LeeReamond
2022-04-24 07:52:15 +08:00
@AS4694lAS4808 读取是很简单的,网关方面更新的话也不用停机,只是不知道数据库应该咋搞
des
2022-04-24 07:56:45 +08:00
经常修改的字段?那不就是 json 了?
neptuno
2022-04-24 08:33:59 +08:00
额外添加的字段存 json ,然后 apollo 动态读取配置,通过配置去解析存储到数据库
wowo243
2022-04-24 08:50:14 +08:00
试试非关系的数据库,比如 mongo ?
lower
2022-04-24 08:54:30 +08:00
我见过的大部分 cms 都是这么搞的,扩展 /自定义模型……
表结构有点类似数据库 schema 表,存取都得做一些解析处理;

也许你可以考虑不要用传统关系型数据库了。。
opengps
2022-04-24 09:26:23 +08:00
表结构级别的变更还是尽量避免吧,用扩容新表等方式取代,避免触碰原有结构的调整
sadfQED2
2022-04-24 09:28:30 +08:00
目测你应该是 MySQL ,动态 DDL 有很多很成熟的方案了
LeeReamond
2022-04-24 09:58:42 +08:00
@lower 头疼,关系型数据库还是好用啊,取某范围数据的某字段之类的,还有连表。存 kv 数据或者关系型数据库里存 json 的话相当于抛弃了关系型的好处,所以每次读取一个字段都需要读取并解析全库
johopig
2022-04-24 11:19:06 +08:00
看起来只是新增列的操作,动态读取配置,然后直接执行 Online DDL 的影响是很小的
3dwelcome
2022-04-24 12:36:00 +08:00
和 6 楼一样,我也看过很多 cms 自己弄一套 schema ,来应对不断变化的需求。

就是为了能动态扩展字段数量。
guisheng
2022-04-24 12:42:45 +08:00
一个主备加定时启动脚本加短信通知是不是就好了…… 本来就是单体服务这样弄下去可维护性会比较差吧
oneisall8955
2022-04-24 12:48:07 +08:00
竖表横表?
golangLover
2022-04-24 13:42:38 +08:00
这是你们管理的问题,不是技术问题。哪有天天加 field 的。如果经常加 field ,只是证明管理的规划很差

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/848851

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX