OceanBase是阿里巴巴集团推出的一款分布式关系型数据库,它是一个高性能、可扩展、可靠的分布式数据库系统。OceanBase采用了分布式存储技术,将数据存储在多台机器上,以实现海量数据的存储和访问。
OceanBase的核心是一个分布式存储系统,它将数据存储在多台机器上,以实现海量数据的存储和访问。OceanBase使用了一套独特的分布式存储体系结构,包含了多个节点、多个副本、多个表格、多个行、多个列以及多个内部衔接。这套体系结构使得OceanBase能够在大规模集群中运行,并能够实时读写大量数据。
OceanBase使用了一套独特的分布式存储体系结构,包含了三大部分:节点、副本和衔接。节点是OceanBase中最小的单元,它代表一台物理机或者一台虚拟机。副本是由节点所形成的逻辑单元,它代表一份数据副本。而衔接是由副本所形成的逻辑单元,它代表一条通道连接不同副本之间。
此外,OceanBase还使用了一套独特的分布式语义保证体系来保证整个集群中所有副本之间的数据一致性。这套体系包含了四大部分:原子性、隔断性、隔断性传递性和时间传递性。原子性保证事务中所包含的所有步骤要么共同成功要么共同失败;隔断性保证不同事务之间不会造成干扰;隔断性传递性保证不同事务之间不会造成干扰;时间传递性保证不同时间内对相同数据进行相应的写入/读取/修正/删除/回退/回归都能得出正确的执行顺序。
OceanBase 架构如下: └───┐ └───┐ │ │ │ └──────┐ └──────┐ └──────┐ └──────┐ └──────┐ └──────┐ │ │ │ │ │ │ │ │ │ ├─────────▶ Node1 ◀───────── Node2 ◀───────── Node3 ◀───────── Node4 ◀─────────▶ ReplicaGroup1 ├─────────▶ Node5 ◀───────── Node6 ◀───────── Node7 ◀───────── Node8 ◀─────────▶ ReplicaGroup2 ├─────────▶ ... ... ... ... ... ... ▶ ReplicaGroupN ├─────────▶ NodeN-3 ◀──────NodeN-2◀──────NodeN-1◀──────NodeN◄──────ReplicaGroupM │ ▲ ▲ ▲ ▲ ▲ ▲ │ │ ├── Table1 ├── Table2 ├── Table3 ├── Table4 ├── Table5 ├── Table6 │ └──────────▷ Row1 Row2 Row3 Row4 Row5 Row6 ┘
本文为您介绍 OceanBase 迁移服务(OceanBase Migration Service,OMS)包含的组件。
OMS 内部主要包含以下组件:
OMS 结构迁移的核心组件(DBCat)作为 OceanBase 原生的 Schema 转换引擎,可以根据源端、目标端具体的数据源类型和字符编码类型,进行精确的数据类型映射或转换。OMS 的结构迁移组件支持转换、迁移数据库中的表、约束、索引和视图等多种对象。
同时,DBCat 可以严格对齐和兼容 OceanBase 的租户类型。例如,OceanBase 的某个版本暂时不支持源端数据库中的部分数据源类型,DBCat 会选择最接近且兼容度最高的数据类型进行转换映射。
全量数据流模块(Dataflow)负责源库存量数据的迁移,以及迁移后的全字段校验。为了扩展灵活性和充分复用组件,Dataflow 自下而上分别是 Reader 模块、Writer 模块、Broker 模块和统一数据模型层:
Reader 模块:负责从源端读取数据,每一种数据库类型都有对应的 Reader 插件。Reader 插件根据统一数据模型层转换读取的记录后,将其放入 Broker 模块中,由其它模块消费。
Writer 模块:从 Broker 模块订阅某张表的记录,根据每个 Writer 插件的类型,将记录按照统一数据模型层转换为适配下游的插入语句后,写入下游。
Broker 模块:用于解耦 Reader、Writer 或其它模块,以提升性能。解藕后,上下游模块可以相互独立,便于维护和扩展。
统一数据模型层:各组件间通过 Broker 要实现解藕,还需要有一层统一数据模型。数据从 Reader 写入 Broker 时需要先按统一数据模型转换,从 Broker 获取数据记录后,也需要由记录的统一数据模型转化为下游适配的对象或语句。
在上述底层模块的基础上,OMS 实现了数据的迁移、校验和订正。
迁移数据时,您需要在配置好源端、目标端、待迁移表和库表映射等关键信息后,为每张迁移表创建一条 Reader > Broker > Writer 的通道,再由上层迁移程序对每张表的迁移进行调度。您可以并发迁移多张表,在 Reader 和 Writer 组件中可以并发执行每张表的迁移。
进行数据校验和订正时,您需要在配置好源端、目标端、待迁移表和库表映射等关键信息后,为每张校验的表创建 SrcReader > Broker > DstReader 和 Broker > Verifier 的校验通道。
不同类型数据库的日志读取模块(Store)的实现方式不同,例如 OceanBase Store 模块的实现方式是依赖于 OceanBase 的 Liboblog 工具。
Lliboblog 是 OceanBase 的增量数据同步工具,通过 RPC 方式拉取 OceanBase 各个分区的 Redo 日志后,结合各个表和列的 Schema 信息,转换 Redo 日志为中间定义的数据格式,最后以事务的方式输出修改的数据。
同步写入模块包括 JDBCWriter 和 Connector:
同步写入模块(JDBCWriter)是从日志读取模块(Store)拉取增量数据的同时,将其翻译为 INSERT
、UPDATE
或 DELETE
等 SQL 语句写入数据至目标端的组件。
Store 组件记录的是流式的增量数据,可以通过 Pipeline 保证数据的有序性。Writer 组件单线程顺序执行事务可以满足基本要求,但不能扩展性能,所以 OMS 引入并发写机制。
在提升同步性能的同时,还需要保证数据的一致性,所以 OMS 引入冲突矩阵机制实现乱序并发写入,以确保每个事务的最终一致性。
为了避免循环复制问题,所有通过 OMS 的 JDBCWriter 模块写入的数据都会在 Store 组件中进行打标处理,以确保不会再次被其它模块消费。
同步写入模块(Connector)是将 JDBCWriter 的功能插件化,包括源端(Source) 和目标端(Sink) 插件。以同步 OceanBase 数据至 Kafka 为例,在数据同步过程中,OB-Store-Source 为源端插件,Kafka-Sink 为目标端插件。
Connector 的优势如下:
可扩展性强,源端和目标端可以进行组合。
方便统一同步任务资源的管理、监控和运维。
作为统一中间层,将不同源端的 Record 格式进行结构化,便于实现 Record 的 Filter 和 Transformer 等功能
本文档为您展示通过 OceanBase 数据迁移功能将数据库从自建 Oracle 迁移至 OceanBase Oracle 的操作步骤。OceanBase 数据迁移功...
开发者完成 HarmonyOS 应用开发后,需要将应用打包成 APP,用于发布到华为应用市场。打包 APP 时,DevEco Studio 会将工程目录下...
CookieStorepublic interface CookieStoreCookieStore 对象表示 cookie 的存储。 可以存储和检索cookies。CookieManager 将调用 ...
Mappublic interface MapK,V将键映射到值的对象。 map不能包含重复的键; 每个键最多可以映射到一个值。这个接口代替了 Dictiona...
PrimitiveIterator.OfLongpublic static interface PrimitiveIterator.OfLongextends PrimitiveIteratorLong,LongConsumer专门用...