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 副本,都能提供读写服务。

相关文章
|
6月前
|
SQL 流计算 OceanBase
OceanBase CDC从热OB库采集过来的Tinyint(1)类型会默认转换成Boolean,请教一下,如果想转换成int类型,有什方法么?
【2月更文挑战第25天】OceanBase CDC从热OB库采集过来的Tinyint(1)类型会默认转换成Boolean,请教一下,如果想转换成int类型,有什方法么?
175 3
|
4月前
|
DataWorks API 数据库
DataWorks操作报错合集之在使用 OceanBase (OB) 作为数据源进行数据集成时遇到报错,该如何排查
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
3月前
|
存储 SQL 数据库
OceanBase数据库的分区策略
【8月更文挑战第13天】OceanBase数据库的分区策略
205 5
|
6月前
|
存储 关系型数据库 数据处理
OceanBase数据库常见问题之start ob出错如何解决
OceanBase 是一款由阿里巴巴集团研发的企业级分布式关系型数据库,它具有高可用、高性能、可水平扩展等特点。以下是OceanBase 数据库使用过程中可能遇到的一些常见问题及其解答的汇总,以帮助用户更好地理解和使用这款数据库产品。
|
4月前
|
DataWorks 关系型数据库 MySQL
DataWorks操作报错合集之从OceanBase(OB)数据库调度数据到MySQL数据库时遇到连接报错,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
5月前
|
存储 分布式数据库 数据库
深入OceanBase内部机制:分区构建高可用、高性能的分布式数据库基石
深入OceanBase内部机制:分区构建高可用、高性能的分布式数据库基石
|
SQL 运维 负载均衡
漫谈OB | OceanBase 在海量数据和高并发下的应用实践
数据库选型用 OceanBase 的原因很多,传统数据库上的业务做分布式数据库选型,其中一类原因是数据库遇到瓶颈。这类客户业务特点之一是数据量和访问量都很大。本文总结业务数据量和访问量大的业务场景下的OceanBase实践经验。 💡 本文适用于 OceanBase 企业版和社区版
1080 0
漫谈OB | OceanBase 在海量数据和高并发下的应用实践
|
存储 SQL 负载均衡
OceanBase 源码解读(三):分区的一生
源码是OceanBase的“方向盘”,本系列主要围绕“源码解读”,通过文章阐述,帮助大家理清数据库的内在本质。此前,带你读源码第二篇《戳这里回顾:OceanBase源码解读(二):SQL的一生》为大家介绍了OceanBase 数据库中一条 SQL 的执行流程主路径,包括接收、处理、返回结果给客户端的过程,探讨了OceanBase的SQL引擎模块。
359 0
OceanBase 源码解读(三):分区的一生
|
存储 缓存 NoSQL
OB有问必答 | LSM Tree的技术原理是什么?OceanBase的存储引擎为什么基于LSM Tree?
相对于传统的page based数据库存储方式,OceanBase使用了现在非常流行的LSM Tree作为存储引擎保存数据的基本数据结构,这在分布式的通用关系型数据库当中是很少见的。今天我们就来为大家详细解读下LSM Tree的技术原理。
OB有问必答 | LSM Tree的技术原理是什么?OceanBase的存储引擎为什么基于LSM Tree?
下一篇
无影云桌面