BigTable,Percolator,MVCC初步理解

数据库分布式事务

解决数据库内部多个数据节点写入时的原子性问题

BigTable

学习资料:理解BigTable | Hexo

一个分布式 多维 映射 表

三级索引row_key,column_key,timestamp查询

row_key: 倒排(com.google.www)字符串,按照字典序排序

column: 有列族的概念,族名必须有意义,是访问控制的基本单元

time: 保存数据版本

一个整表分成tablets(子表)

Chubby作用:1. 选定master server,获取独占锁 2.发现活跃的子表服务器 获取子表位置

主服务器作用:1. 了解子表分配情况,监控 2. 扫描metadata table发现未分配的子表,将其分配到子表服务器 3. 负载均衡

子表的物理形态:SSTable

SSTable是专门为Bigtable设计的存储格式

子表服务器(一个server大概存100个子表)

一个子表对应多个SSTable

查询体系

BigTable基本架构:

 

子服务器知道对应子表的sstables,通过索引找到它(在GFS)里,通过GFS找到数据。

Percolator

分库分表水平切分,解决可扩展性

跨行事务:在单个事务中操作多行

增加了一个全局时钟TSO和全局锁

事务流程:(加强版2PC)

在bigtable列概念上增加两个列:lock(存储事务过程中的锁信息), write(存储最近一次提交的版本号)

大体流程就是

pre-write阶段,事务内确定一个primary写操作,其他的都是secondary。先要执行primary写操作,然后把primary lock锁定主操作行,然后再去异步执行次操作。在此操作的lock列添加主操作行及列名。

commit阶段,先要去提交主操作,即在主操作行的write列加上最新timestamp。然后抹去lock,之后异步地把其他此操作给提交,抹去lock。

转账流程很好理解漫谈Google Percolator分布式事务-CSDN博客

快照隔离级别:

区别于传统关系型数据,percolator是快照隔离级别。

优点:

对于读操作:能够保证不会幻读(即读到多一行数据,结果集不同)

对于写操作:能够保证在多个事务并发的时候,不会有多余一个事务提交成功。

实现:保证所有commit_ts的时间要早于之前所有start_ts和commit_ts。

 MVCC

为了提高并发性能,处理读写冲突,目的是不加锁,非阻塞并发读。

当前读:select lock in share mode, select for update, update, insert,delete。这些操作都会加锁

快照读:不加锁,非阻塞读

MVCC是行锁的变种,避免了加锁操作,但是基于多版本,意思是可能读到的是历史版本。

InnoDB 的MVCC如何工作:

InnoDB存储记录多个版本

 Mysql-MVCC流程理解

核心是返回查询结果的两个条件:

1. 事务开始前已经存在,或自己插入。

2. 事务读取行在开始之前未删除。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值