常规的知识积累

jdk1.8引入的一个基于事件驱动的异步回调类,简单的来说当前使用异步线程执行一个任务的时候,我们希望在任务结束的时候执行一个触发的一个动作,而compliteFuture就能实现一个这样的功能,在一个批量支付的业务逻辑里面,涉及到查询订单,支付,发送邮件通知,这三个逻辑是按照顺序同步实现的,先查询,再支付,再发送,这就导致效率比较慢,

极大提升了业务场景的处理性能completeFuture根据五种不同的方式把多个异步任务组成一个具有先后关系的处理链,然后用事件驱动任务链的执行

1.thencombine 并行

2.串行

3.串行(后一个需要前一个的任务结果)

 

2.Mysql事务的实现原理

mysql满足ACID,原子性(atomic)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。

原子性保证多个dml操作的原子性,要么都成功,要么都失败,失败就意味着对原本执行成功的数据进行回滚,所以innoDB就有一个uno_log表,先把数据快照保存到uno_log中,一旦失败就讲uno_log数据就行数据回滚

c一致性,数据的完整性约束没有被破坏,更多是依赖业务层保障,住建唯一约束,字段长度

i 隔离性,多个事务对同一数据操作,如何避免干扰导致数据混乱的问题,innodb采用sql92的一个标准提供了四种隔离级别的实现 ru未提交读,rc已提交读,rr可重复度,serializable 串行

innoDB默认rr, 然后用MVCC机制解决了脏读和不可重复读的问题,然后用行锁或者表锁解决了幻读的问题

问题:关于你对MVC的理解,

关于你对MVC的理解,高手的回答。对MVcC的理解,我觉得可以从数据库的三种并发场景来说。第一种是读和读的并发,就是两个线程a和B同时进行读操作,这种情况下呢,不会产生任何的并发问题。第二种是读写并发,就是两个线程a和B在同一个时刻分别进行读写操作,这种情况下可能会对数据库的数据造成以下的一些问题,第一个事务隔离性问题,第二个呢,会出现脏读、幻读和不可重复读的问题。第三种写和写的并发,就是两个线程a和B同时进行写操作,这种情况下可能会存在数据更新的丢失问题。而MVCc就是为了解决事务操作中并发安全问题的。无锁并发控制技术,名称是multi-version concurrency control,也就是多版本并发控制,它是通过数据库记录中的隐式字段 undo日志和read view来实现的。
MVCc主要解决三个问题,第一个是通过MVcC可以解决读写并发阻塞的问题,从而提高数据的并发处理能力。第二个是MVcC采用的是乐观锁的方式实现,降低了死锁的概率。第三个呢,解决了一致性读的问题,也就是事物启动的时候,根据某个条件去读取到数据,直到事务结束的时候再去执行,相同的条件还是读到同一份数据,不会发生变化。而我们在使用MVCc的时候,一般是根据业务场景来选择组合搭配,乐观锁或者悲观锁,这两个组合中,MVC用来解决读写冲突,乐观锁或者悲观锁用来解决血和血的冲突,从而最大程度的去提高数据库的并发性能。以上呢,就是我对MVcC的一个理解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值