高并发的情况对数据库更新方法
  

sailyang 2439

{{ttag.title}}
在实际工作过程中,很多企业是业务系统都存在高并发的情况,动辄随便一个数据表存在上千万数据量。

由于企业业务有特殊性,难免会通过数据库进行更新操作。如何在高并发情况下对数据库进行操作,对数据库进行更行时,如果没有防重机制做拦截,就会导致数据被更新多次,造成更新后程序的后续操作。高并发的情况下,多个请求对同一条数据进行更新操作,易导致数据被多次更新,影响数据库的正确性;如何在高并发情况下对数据进行更新:


方案一:

加锁查询拦截,在更新前,加锁(分布式系统用分布式锁、也可用数据库锁等),查询需要更新的数据是否存在且未被更新,根据查询结果做更新操作,更新后释放锁。适用于实际环境需要对数据需要进行多次更新,或多个中间状态都可以对数据进行操作;优势需要保证数据更新的一致性。缺点:系统性能消耗大,锁表期间不能进行业务系统录入,影响系统的效率。
SQL代码如下:
// 用redis加锁   redis.set(key, value);  
// 查询要更新的数据  int result = select * from table where 条件;
// 更新操作  if(result == 1){   
//判断数据是否已经被更新   if(未被更行){
//更新       update table set XXX=x2 where 条件;
}}
// 释放锁



本人所就职公司存在业务不能停机也不能中断的情况。所以推荐一下方案二:
方案二:
数据库层面拦截,直接在更新数据时带状态更新数据,根据更新后成功与否做后续操作;适用于明确知道更新数据前或后的状态,且不会在更新时多次发生状态变化,保证前后一致性;优势简单,保证数据更新的一致性,且对效率影响较小;缺点系统性能消耗大,锁机制影响系统的效率;
// 数据库层的sql语句限制即可
int result = update table set 更新的内容 where 原数据的内容  != 更新的内容;
//  更新成功if(result == 1){
// 执行更新成功后的操作
    }else{
  // 执行更新失败后的操作

打赏鼓励作者,期待更多好文!

打赏
3人已打赏

Sangfor_闪电回_朱丽 发表于 2019-9-6 17:17
  
感谢楼主带来的运维经验分享!!!

tj_zero 发表于 2019-9-18 10:50
  
并发运维是生产环境中常遇到的事,而且由于实际业务情况可能会多少有所影响,因此正确评估和充分实施就显得格外重要;本案例脚本可以作为参考。
买辣椒也用券 发表于 2019-9-18 15:18
  
这个经验很实用,有些甲方客户,并不太清楚如果评估并发量,这个帖子很棒
新手781833 发表于 2019-9-18 17:02
  
这个经验很实用,很多情况下数据库不能用平均并发去计算硬件配置,只能按最高峰去配置,但是最高峰配置硬件就增加了成本
发表新帖
热门标签
全部标签>
西北区每日一问
技术盲盒
每日一问
技术笔记
干货满满
GIF动图学习
功能体验
通用技术
标准化排查
SDP百科
产品连连看
技术咨询
技术圆桌
社区新周刊
2023技术争霸赛专题
秒懂零信任
自助服务平台操作指引
信服课堂视频
畅聊IT
在线直播
新版本体验
技术晨报
安装部署配置
sangfor周刊
VPN 对接
专家问答
高手请过招
升级&主动服务
答题自测
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
原创分享
解决方案
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
排障笔记本
产品预警公告
玩转零信任
信服圈儿
S豆商城资讯
技术争霸赛
「智能机器人」
追光者计划
深信服技术支持平台
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
以战代练
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
排障那些事
高频问题集锦

本版版主

461
247
13

发帖

粉丝

关注

本版达人

feeling

本周分享达人

新手29676...

本周提问达人