OB有问必答 | 分区是什么?在OceanBase中起到了什么作用?

简介: 分区是一种水平拆分方案,是数据同步的最小单元,是高可用的最小单元,是高可用的最小单元。

虽然“分区”的概念不是很新,但是 ”分区”对理解 OceanBase 的很多原理却是非常重要的。

分区是一种水平拆分方案
从水平拆分设计上说,目前分布式数据库产品里有三种拆分途径。一是以 Spanner、为代表的在存储层按定长块切片的,称为Region,拆分细节对业务完全透明。二是以 ORACLE、OceanBase 为代表的使用分区表的多分区拆分,业务需要指定拆分策略和分片数,使用上基本上跟单表一样。三是以DRDS等为代表的分布式数据库中间件的分库分表拆分,业务使用的是一个逻辑表,实际数据存放在多个结构相同命名或位置不同的物理表上。

OceanBase 里一个非分区表只有一个分区,一个分区表有多个分区。分区就是表的子集OceanBase 里单个分区只能在一个节点上,不同分区可以在不同节点上。

分区的好处有:
1.提高可扩展性。分区表的不同分区可以分布在不同的机器上,使得单表能获得多机的处理能力,并且使得单表的容量可以超过单机的容量。性能也是同理。

2.提高可管理性。对于数据操作的粒度可以控制在单个分区。例如按照时间分区的数据,可以通过 drop 一个分区来实现数据过期功能。

3.提高性能。通过分区裁剪,可以快速定位到用户需要查询的分区,提高查询性能。

分区是数据同步的最小单元
在 OceanBase 里,每个数据有三份,每个具体的分区也有三份,分布在不同的 Zone 里的不同节点上。每个分区有三份副本,副本内容相同,角色上有区分,是1个 leader 副本和2个 follower 副本。有时候会简单说1个主副本2个备副本。但是主备的概念容易引起误解。

默认业务只有 leader 副本提供读写服务,follower 副本只同步数据,不提供服务。特殊场景下,业务 SQL 使用弱一致性读 Hint (即 read_consistency(weak))可以就近读取follower 副本。数据的变更在 leader副本,事务提交的时候,leader 副本会就Redo 落盘发起表决,使用 Paxos 协议。具体就是除了自己把 Redo 落盘,同时还发往两个 follower 副本,follower 副本收到 redo 落盘后表决“成功”。同时 Follower副本开始应用该 Redo。三副本里只要有一半以上成员(2个副本)表决落盘成功,leader 副本上的业务的事务就提交成功返回消息给客户端。

每个分区的三副本组成一个独立的 Paxos 小组,相应的 Redo 在副本之间传输。所以说分区是数据同步的最小单元。并且这种 Redo同步是自动的,不需要也不能干预的。

分区是高可用的最小单元
每个分区的三副本会保持数据同步,目的是为了保证在 Leader 副本不可用的时候选举出新的 Leader 副本拥有全部的数据。Paxos协议保证了 Redo 会在至少一个 Follower 副本里有(最终会所有Follower副本都有)。三副本会跟 OceanBase 集群的 rootservice 服务维持心跳,当 Leader 副本不可用时,经过2个租约时间后 rootservice 会选举出新的Leader 出来,在应用完 Redo 后新 Leader提供读写服务。

分区的选举是自动的,只要多数派存活,就不需要人工介入。所以说“分区”是高可用的最小单元。OceanBase 的“切换”指的就是一个个 Leader 分区重新选举的过程,并不是实例级别的“切换”。当一个机器节点挂掉后, 严格的说,其影响只是局部的数据(Leader 副本)的读写访问短暂中断)。在OceanBase 里,一般不会说某台机器是主,某台机器是备,因为理论上所有的机器都可能存在 Leader 副本,都能提供读写服务。

相关文章
|
存储 SQL 缓存
mysql原理、索引、优化-【公司内部培训】
mysql原理、索引、优化-【公司内部培训】
190 0
|
3月前
|
存储 NoSQL Redis
Tair的发展问题之在Redis集群模式下,Lua脚本操作key面临什么问题,如何解决
Tair的发展问题之在Redis集群模式下,Lua脚本操作key面临什么问题,如何解决
|
5月前
|
SQL 存储 关系型数据库
PolarDB产品使用合集之有的sql里面有自定义存储函数 如果想走列存有什么优化建议吗
PolarDB是阿里云推出的一种云原生数据库服务,专为云设计,提供兼容MySQL、PostgreSQL的高性能、低成本、弹性可扩展的数据库解决方案,可以有效地管理和优化PolarDB实例,确保数据库服务的稳定、高效运行。以下是使用PolarDB产品的一些建议和最佳实践合集。
333 0
|
6月前
|
SQL 关系型数据库 数据库
一文熟悉PolarDB-PG 分区表核心特性
在 PolarDB-PG 数据库中,分区表 (Partitioned Table) 使您能够将非常大的表分解为更小且更易于管理的部分,这个部分称为分区 (Partition) 。 每个分区都是一个独立的对象,具有自己的名称和可选的存储特性。本文首先简单的介绍了分区表策略以及它的优势特点,然后介绍了PolarDB-PG 分区表支持的查询优化特性,最后介绍了分区表上的本地索引和全局索引,从而帮助用户对PolarDB-PG 分区表有一个全面的了解。
|
6月前
|
存储 监控 关系型数据库
Mysql内部在索引层面的优化
Mysql内部在索引层面的优化
|
存储 算法 NoSQL
高并发分布式环境中获取全局唯一ID[分布式数据库全局唯一主键生成]
高并发分布式环境中获取全局唯一ID; 分布式数据库全局唯一主键生成
2995 0
|
存储 监控 Java
【ClickHouse 技术系列】- 使用新的 TTL move,将数据存储在合适的地方
本文翻译自 Altinity 针对 ClickHouse 的系列技术文章。面向联机分析处理(OLAP)的开源分析引擎 ClickHouse,因其优良的查询性能,PB级的数据规模,简单的架构,被国内外公司广泛采用。本系列技术文章,将详细展开介绍 ClickHouse。
【ClickHouse 技术系列】- 使用新的 TTL move,将数据存储在合适的地方
|
存储 SQL 缓存
|
存储 SQL Oracle
OB有问必答 | 分区是什么?在OceanBase中起到了什么作用?
分区是一种水平拆分方案,是数据同步的最小单元,是高可用的最小单元,是高可用的最小单元。
|
关系型数据库 PostgreSQL