请教大佬一个问题,有一个需求更新 30 张表的一个字段,怎么去实现?

2022-10-11 15:53:14 +08:00
 longmeier90
我们公司业务场景是 把两个患者合并成一个患者,但是就需要把库里的 30 张表(未来会更多表...都是加的冗余字段)的信息更新一下。
那么线上系统发起一个需求,怎么能在不影响性能,而且还有保证信息的完整性的情况下去实现。

1. 如果保证完整性就需要加事务,但是就会锁表造成系统卡顿,app 转圈(之前的一些其他业务事务出现类似的)影响线上业务。
2. 不加事务,怎么能保证数据的一致性。

3.向这种场景应该是常见的吧,大佬都是怎么设计的?

3920 次点击
所在节点    Python
43 条回复
hahasong
2022-10-11 16:01:23 +08:00
把这个字段只留一张表,或者常用字段都抽出来一张表。然后改代码逻辑重新读。再删掉 30 张表里冗余的字段
guoziq09
2022-10-11 16:06:07 +08:00
我的想法是异步曲更新数据。callback 通知或者客户端轮训查询结果。期间在加上定时任务的补偿操作。
ipwx
2022-10-11 16:07:27 +08:00
为啥更新一个患者的 30 张表需要锁全部患者表的数据啊?

难道你们数据库不支持行锁?
westoy
2022-10-11 16:10:19 +08:00
这种不需要高并发的业务代码搞互联网这套字段冗余是真的没事找事
joApioVVx4M4X6Rf
2022-10-11 16:10:44 +08:00
https://www.cosmicpython.com/book/preface.html

这本书里介绍了一种基于事件的架构,读可以容易,写的时候应该是走消息队列的。读写分离应该架构改动不小了
lmshl
2022-10-11 16:11:57 +08:00
不应该是行级锁么?
xsm1890
2022-10-11 16:15:26 +08:00
感觉是设计阶段没符合 2NF 导致的问题??
longmeier90
2022-10-11 16:15:39 +08:00
@ipwx 那些表有些都是记录表,有很多行数据。
longmeier90
2022-10-11 16:15:47 +08:00
@lmshl 那些表有些都是记录表,有很多行数据。
longmeier90
2022-10-11 16:21:51 +08:00
@xsm1890 加一些冗余字段是为了查询是方便。很多统计都会联表查询数据量大的时候就会慢
lmshl
2022-10-11 16:24:01 +08:00
不管有多少行,都应该是行级锁啊
Mithril
2022-10-11 16:24:27 +08:00
做医疗系统的话,利用好半夜人少这段时间。
用个表记录对应关系,弄个定时器半夜的时候再改。
跟客户说好,因为修改患者对应关系很复杂,尽量不要瞎搞。一旦真的搞错了,那所有修改第二天生效。
只要能该需求那都不是问题。
p23XnFNH1Wq953rV
2022-10-11 16:27:20 +08:00
异步执行, 定时检查
如果端需要看到效果, 而异步还没执行完, 就要增加异步效率, 或者通过其他方式让端先看到"未来数据"
longmeier90
2022-10-11 16:31:32 +08:00
@lmshl 嗯嗯,行锁也会影响查询
longmeier90
2022-10-11 16:34:27 +08:00
@Mithril 但是未来可能会增加表,也会加这个字段。还得改这个修改程序
lmshl
2022-10-11 16:43:18 +08:00
读已提交怎么影响查询?
yh7gdiaYW
2022-10-11 16:56:33 +08:00
发 30 条消息异步修改?
yh7gdiaYW
2022-10-11 16:57:00 +08:00
@xsm1890 这玩意儿过时了
wuxiaoqing234
2022-10-11 17:05:20 +08:00
@longmeier90 做两个异步任务。 一个在夜间根据主表的字段,去刷新其他表的数据。
第二个,做保存修改操作的时候, 提交一个单个的修改任务,去刷新其他数据库
longmeier90
2022-10-11 17:08:23 +08:00
@lmshl 刚试过了,查询没问题,写入会提示锁冲突。

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

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

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

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

© 2021 V2EX