事务和乐观锁

事务:

ACID

Atomicity:全做或全不做

Consistency:关系型数据库中的约束,做之前或之后都要满足,不仅仅是数据库物理上的约束,包括内部逻辑的假设都必须是成立的

Isolation:事务间互相独立

Durability:事务结束后(包括断电)结果都能保存下来

 

事务的隔离级别:Isolation

Read uncommitted:还没committed就被读出

Read Committed:只会读到别人committed的值

Repeatable Reads:读到的是begin事务时的值

Serializable:两事务同时发生的结果必定等于这两个事务先后发生结果中的一个。

 

SELECT @@tx_isolation;//显示隔离级别

 

SET SESSION  TRANSACTION  ISOLATION LEVEL  REPEATABLE  READ;//设置隔离级别

 

SELECT count  FROM  ‘product’ WHERE  ‘productId’ =2  FOR UPDATE;//把该行加锁,很耗费资源。

 

UPDATE ‘product’  SET  ‘count’ =49 WHERE  ‘productId’  =2  AND  ‘count’ =50;//加版本保护

 

乐观锁(冲突机会不多的时候使用):

读取数据,记录Timestamp

修改数据

检查和提交数据

 

抢票非常紧凑,用乐观锁不行,用SELECT…FOR  UPDATE系统开销更加大,很可能不是在数据库里进行抢票,count很可能存在服务器内存中或非关系型数据库

 

可以用来程序调优的做法:

改善数据访问方式以提升缓存命中率

利用数据库连接池替代直接的数据库访问(直接访问数据库比较慢)

使用迭代替代递归(递归使用栈消耗大)

合并多个远程调用批量发送(与滑动窗口相类似)

共享冗余数据提高访问效率

但使用多线程的方式不能提高I/O密集型操作的效率,I/O密集型操作是所有的线程都在等待一个I/O的操作,当输入输出的数据来了后,可以非常快的处理完,但大部分时间在等待中,已经在等待中,增加线程还是没办法提高效率,反正再多线程都在等。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值