9.5.3 数据分区

虽然我们坚持认为通过单机性能优化以及硬件性能的提升,UpdateServer单点对于互联网数据库业务不会成为瓶颈。但是,随着OceanBase的应用场景越来越广,例如,存储原始日志,我们也可能需要实现更新节点可扩展。本节探讨一种可能的做法。

OceanBase可以借鉴关系数据库中的分区表的概念,将数据划分为多个分区,允许不同的分区被不同的UpdateServer服务。例如,将所有的数据按照哈希的方式划分为4096个分区,这样,同一个集群中最多允许4096个写节点。

如图9-11所示,可以将Users表格和Albums的user_id列按照相同的规则做哈希,这样,同一个用户的所有数据属于相同的分区。由于同一个分区只会被同一个UpdateServer服务,因此,保证了同一个用户下读写操作的事务性,另外,不同用户之间的事务可以通过两阶段提交或者最终一致性的方式实现。这种方式实现起来非常简单,而且能够完全兼容SQL语法。

9.5.3 数据分区 - 图1

图 9-11 哈希分区SQL语法

从图8-1中的整体架构图可以看出,在目前的单更新节点架构中,UpdateServer进程总是与ChunkServer进程部署到不同的服务器,而且两种服务器对硬件的要求不同。如果OceanBase支持哈希分区,还能够将UpdateServer进程和ChunkServer进程部署到一起,这样部署起来会更加方便。

除了哈希分区,OceanBase还能够通过范围分区实现更新节点可扩展,即不同的用户按照user_id有序分布到多台UpdateServer。虽然支持UpdateServer线性可扩展的架构看似“比较优雅”,但是,这件事情并不紧急。这是因为,OLTP类应用对性能的需求是有天花板的(例如全世界人口共50亿,即使其中五分之一的人都在某一天产生了一笔交易,这一天的总交易笔数也只有10亿笔),单UpdateServer对于OLTP类数据库业务的性能是足够的。