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

相关文章
|
1月前
|
SQL 流计算 OceanBase
OceanBase CDC从热OB库采集过来的Tinyint(1)类型会默认转换成Boolean,请教一下,如果想转换成int类型,有什方法么?
【2月更文挑战第25天】OceanBase CDC从热OB库采集过来的Tinyint(1)类型会默认转换成Boolean,请教一下,如果想转换成int类型,有什方法么?
27 3
|
SQL 运维 负载均衡
漫谈OB | OceanBase 在海量数据和高并发下的应用实践
数据库选型用 OceanBase 的原因很多,传统数据库上的业务做分布式数据库选型,其中一类原因是数据库遇到瓶颈。这类客户业务特点之一是数据量和访问量都很大。本文总结业务数据量和访问量大的业务场景下的OceanBase实践经验。 💡 本文适用于 OceanBase 企业版和社区版
826 0
漫谈OB | OceanBase 在海量数据和高并发下的应用实践
|
存储 SQL 缓存
|
存储 缓存 NoSQL
OB有问必答 | LSM Tree的技术原理是什么?OceanBase的存储引擎为什么基于LSM Tree?
相对于传统的page based数据库存储方式,OceanBase使用了现在非常流行的LSM Tree作为存储引擎保存数据的基本数据结构,这在分布式的通用关系型数据库当中是很少见的。今天我们就来为大家详细解读下LSM Tree的技术原理。
OB有问必答 | LSM Tree的技术原理是什么?OceanBase的存储引擎为什么基于LSM Tree?
|
Oracle 关系型数据库 MySQL
OB有问必答 | OceanBase主备怎么同步?是强一致吗?
OceanBase集群里机器通常没有主备之说,数据同步是发生在每个分区的主副本到备副本之间的。不同分区的主备同步是独立进行的。同一个分区(数据)的主副本位置不是固定的(但受策略控制),只会出现在其中一个Zone的其中一台机器上,但是不同分区的主副本是可以位于不同Zone或者不同机器上。
|
Oracle 关系型数据库 数据库
OB有问必答 | OceanBase 如何做到 RTO < 30秒?
“OB有问必答”是OceanBase最新上线的互动类栏目,每周围绕一个关于分布式数据库的议题为大家详细展开解答,今天我们围绕服务可用性话题讨论,如果你有任何感兴趣的问题,欢迎留言,我们会每周选取一个问题为大家详细解答。
|
存储 运维 分布式数据库
OB有问必答 | OceanBase如何保证数据可靠性?
“OB有问必答”是OceanBase最新上线的互动类栏目,每周围绕一个关于分布式数据库的议题为大家详细展开解答,今天我们围绕数据可靠性话题讨论,如果你有任何感兴趣的问题,欢迎留言,我们会每周选取一个问题为大家详细解答
|
关系型数据库 MySQL 分布式数据库
OB有问必答 | OceanBase的一致性协议为什么选择 Paxos 而不是 Raft?
“OB有问必答”是OceanBase最新上线的互动类栏目,每周围绕一个关于分布式数据库的议题为大家详细展开解答,如果你有任何感兴趣的问题,欢迎留言,我们会每周选取一个问题为大家详细解答。
|
23天前
|
SQL 关系型数据库 数据库
OceanBase数据库常见问题之upgrade_post想要不显示明文密码如何解决
OceanBase 是一款由阿里巴巴集团研发的企业级分布式关系型数据库,它具有高可用、高性能、可水平扩展等特点。以下是OceanBase 数据库使用过程中可能遇到的一些常见问题及其解答的汇总,以帮助用户更好地理解和使用这款数据库产品。

热门文章

最新文章