# Percolator 背景
![left](./student-guide/diagram/11-Percolator-background-knowledge-01-01.png)
-------------------------------------------------------------
Percolator 背景

Percolator 是在 Bigtable 之上实现的，可以说是为 Bigtable 定制的，它以 Client library 的方式实现。Percolator 利用 Bigtable 的单行事务能力，仅仅依靠客户端侧的协议和一个全局的授时服务器 TSO 就实现了跨机器的多行事务。

Bigtable 是谷歌在介绍的一个分布式的结构化数据存储系统，它被设计用来处理海量数据，按描述，在那个年代集群的规模就达到数千台机器，存储规模达到 PB 级。

从数据模型的角度，Bigtable 可以理解为是一个稀疏的，多维的持久化的键值对Map，一个键值对的格式如下：

```
(row:string, column:string,timestamp:int64)->string
```

key 是行关键字（row），列关键字（column），以及时间戳（timestamp）的组合，value 是任意的 byte 数组。
在 Bigtable 中，一行 row 可以包含多个 column，Bigtable 提供了针对单行的跨 column 的事务能力，Percolator 中多处利用了 Bigtable 单行事务来保证对同一个 row 多个操作的原子性。

Percolator 通过一个全局的授时服务器 TSO 给予事务一个全局的时间戳来解决分布式环境下事务的全局时序问题；通过经典的两阶段提交来解决分布式事务原子提交的问题。Percolator 不仅仅是一个改进版的两阶段提交，它涵盖的内容更多，可以认为是一个完整的分布式事务解决方案，它还包括了依据全局时间戳实现 Snapshot Isolation 隔离级别的并发控制协议，并给出了在故障发生如何进行自动 failover 的细节。
