浅析MySQL二段锁

2017-12-20
阅读 2 分钟
12.9k
背景 虽然两阶段加锁(2PL)听起来和两阶段提交(two-phase commit, 2PC)很相似,但它们是完全不同的东西。 在介绍MySQL二段锁之前,我需要理清一下概念,即MySQL二阶段加锁与二阶段提交的区别: {代码...} 何为二段锁 在一个事务操作中,分为加锁阶段和解锁阶段,且所有的加锁操作在解锁操作之前,具体如下图所示: 加...

本地消息表实现最终一致性

2017-12-13
阅读 2 分钟
13.2k
传统的单体应用不会横跨多个数据库,可以通过单机事务保证一致性。然而在海量数据的场景下,我需要对数据库做拆分,即分库分表,而Cobar、MyCat这类分库分表中间件并不提供分布式事务的特性,并且基于二阶段提交的分布式事务性能较差,对于大多数业务场景来说,并不需要强一致,只需要保证最终一致性即可。

B+树的正确姿势

2017-10-20
阅读 1 分钟
3.8k
用过MySQL的同学都知道高效查询需要走索引,否则全表读取会导致慢SQL。InnoDB的索引是采用B+树实现的。网络和书本上关于B+树的定义各不相同,读者们可能都分辨不清哪个是准确的定义。

Cobar源码解析(二)

2017-09-26
阅读 5 分钟
3k
报文格式 这一节我们来讲Cobar Handshake的过程。 MySQL服务端和客户端交互的所有的包格式都是统一的,报文格式如下图: MySQL报文的消息头共有4个字节,前3字节表示的是实际数据的长度(不包含消息头),并且字节是按照小端模式排放的。 第四个字节MySQL为了防止串包用的,其原理是每收到一个报文,都在sequence id上加1...

Cobar源码解析(一)

2017-09-12
阅读 7 分钟
4.3k
当业务的数据量和访问量急剧增加的情况下,我们需要对数据进行水平拆分,从而降低单库的压力,并且数据的水平拆分需要对业务透明,屏蔽掉水平拆分的细节。并且,前端业务的高并发会导致后端的数据库连接过多,从而DB的性能低下。

MySQL乐观锁在分布式场景下的实践

2017-04-03
阅读 4 分钟
16.2k
在电商购物的场景下,当我们点击购物时,后端服务就会对相应的商品进行减库存操作。在单实例部署的情况,我们可以简单地使用JVM提供的锁机制对减库存操作进行加锁,防止多个用户同时点击购买后导致的库存不一致问题。