文档章节

高并发 数据库操作比如插入,修改等解决办法

之渊
 之渊
发布于 2016/08/07 22:46
字数 688
阅读 632
收藏 8

一般没有办法就是直接操作 数据库了,所以才 需要分布式mysq等,必须有事务。 但是如何并发太大还是不够的, 解决方案: 原子计数器---技术-- redis/noSQL 记录用户行为消息--分布式MQ 消费消息并落地--- mysql 这样可以抗很高的并发,但是成本太大了

运维成本和稳定型: NoSQL,MQ等 开发成本: 数据一致性,回滚方案等 幂等性难保证:重复秒杀问题 不适合新手的架构

为什么不用MySQL呢? 一般认为是mysql低效,其实不是 其实是因为 事务的关系,特别是操作2个表的时候 一个事务 里面 有更新又有插入数据的时候,那么 mysql就是 行级锁启动了,同一条数据就锁着了。 一直到前一个操作的客户 commit或者 回滚该条数据。 其他用户想操作该条数据 是锁着的,在等待。。 如果很多客户那么就会等待太久了。 其中等待时间 包括了 网络延迟 以及GC垃圾回收时间 串行化了

优化方向: 减少行级锁持有时间 将客户端的逻辑放在mysql 里面,避免网络延迟和GC垃圾回收影响

如何放到mysql服务端: 定制SQL方案: update/+[auto_commit]/ ,需要修改mysql源码 意思是,如何 更新成功的结果是1就自动提交,如果失败就自动回滚,不提交给客户端了,造成不必须有的时间影响。 使用存储过程:整个事务在mysql 端完成。 存储过程本身就是 为了 将整个事务在mysql 服务器端完成。 避免客户端去完成事务造成的时间的干扰。 就是 事务竞争优化:减少事务锁时间

比如一个例子: 一个事务,有更新和 插入的操作。 一般情况可能是 , 先执行更新,然后再执行插入 数据到其他表里面。 但是在高并发的情况下, 简单优化 ; 是 这样的, 先 执行插入, 然后 在去更新比较好。 因为 更新的情况下,数据库会对那条数据 加一个 行级锁,先插入呢,可以减少锁的持有时间。 深度优化: 事务SQL在MySQL端执行(存储过程) 存储过程: 1, 存储过程优化: 事务行级锁持有的时间 2, 不要过度依赖存储过程 3, 简单的逻辑可言应用存储过程 4, 这样可以提供并发量,特别是秒杀并发

© 著作权归作者所有

之渊
粉丝 11
博文 565
码字总数 165175
作品 0
佛山
程序员
私信 提问
web项目并发操作的控制办法

我们在开发一个项目时候,由于一些业务的特殊场景,经常会遇到并发操作的情况,比如A用户正在修改某个账户信息,用户B去删除这个账户并提交,可能就出现了一些异常。或者有时候A在添加某个条...

一个大土豆
2013/05/15
680
9
oracle clob/blob 性能问题

oracle clob/blob 性能问题[复制链接] donglin243870 论坛徽章: 1 电梯直达 1# 发表于 2015-7-15 21:09 只看该作者 本帖最后由 donglin243870 于 2015-7-15 21:10 编辑 问题背景: LOB字段是...

rootliu
2018/02/24
0
0
关于SQL SERVER高并发访问的解决办法

关于SQL SERVER高并发访问的解决办法 问题: 后台系统需要连接SQL SERVER,瞬时数据操作可能会很大,如同时有好几万数据要插入数据库,但在插入数据的同时另外的线程可能还要访问本数据库,插...

台湾
2013/10/29
1K
0
oracle中ddl为什么不能回滚

要说明这个问题,首先需要说明什么是DDL语句。DDL语句是数据定义语句,包括各种数据对象的创建、修改和删除,以及授权等操作。 在Oracle中DDL语句将转化为修改数据字典表的DML语句。一个简单...

zh119893
2013/06/03
100
0
分布式系统开发库存超卖的解决方法

这3个问题经常出现,不解决的话,一定会造成经济损失的 1、同一个请求被发送了多次 可能出现的地方:(1)和别人接口对接,别人同一份数据发送了多次 (2)用户在“提交”按钮里点击了多次 (3) ...

fzxu_05
2015/12/06
806
0

没有更多内容

加载失败,请刷新页面

加载更多

告诉大家写简历和面试的技巧(面向高级开发和架构师)

之前我也写过不少介绍面试相关的博文,有些文章的点击量还不低,这些面试相关的经验大多都是从我面试别人的过程中提炼出来了。 在18年底到19年3月,陆续面试了几家公司,有成有不成的,最终进...

java菜分享
39分钟前
6
0
SpringMVC教程3【文件上传下载,静态资源处理及数据校验】

一,文件上传 web.xml配置通用 <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi......

薛小二
47分钟前
7
0
【跟着我们学Golang】基础结构

鉴于上篇文章我们已经讲过Go语言环境的安装,现在我们已经有了一个可以运行Go程序的环境,而且,我们还运行了'Hello World'跑出了我们的第一个Go程序。 这节我们就以'Hello World为例,讲解G...

搜云库技术团队
50分钟前
3
0
谈谈ConcurrentHashMap1.7和1.8的不同实现

ConcurrentHashMap 在多线程环境下,使用HashMap进行put操作时存在丢失数据的情况,为了避免这种bug的隐患,强烈建议使用ConcurrentHashMap代替HashMap,为了对更深入的了解,本文将对JDK1....

群星纪元
51分钟前
2
0
JBDC更新计数行以及调用存储过程返回多个结果集

在学习该知识点之前,需要了解sqlserver的一个存储过程语句:SET NOCOUNT ON; 执行该命令 表示不返回计数行,什么是计数行了,比如我们执行 DELETE ,UPDATE,INSERT的时候,对多少条数据进行了...

小v来上课
53分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部