此文章没有全部按照技术层面出发,仅仅从我在学习过程中的理解,以及与其他传统数据库的比较为主。
学习分布式数据库是一个偶然也是一个必然,我之间一直专注与Oracle、Mysql、中间件等相关工具的学习,
也考取了Oracle 11g和12g的ocp,mysql的ocp,自以为是的认为自己的技术还可以,直到最近参与了一个项目的实施,采用的微服务架构,即Spring boot,Apollo、swagger、eruka、ES各种开源技术源源不断的出现在我的面前,我发现我甚至都无法跟项目组进行有效的交流,我甚至连sharding JDBC、MyCat都是第一次听说。我觉得我应该改变了,要不我就要被“流放”了,因此为了保住饭碗,我需要至少学习一个分布式的数据库。
去IOE这个口号已经喊了10多年,去年也就是2020年因为中美贸易战,更是把去IOE再次推向了高潮,现在大多数政府部门、部分金融行业的数据库已经舍弃了Oracle、DB2,首先作为中国人,我们要鼓励支持国产化;再次要想获得更多的工作机会,那么学习国产数据库是一个必然。
如今国产数据库琳琅满目、各有千秋,有传统的关系型数据库如达梦等,有分布式数据库OceanBase、TiDB等。选择那个数据库进行学习建议先去看官方文档,那个知识体系结构是符合你的学习方法;我随机选择了OceanBase进行学习那么接下来说说我的入门之路,因为OceanBase的结构符合我平时的一个学习思路。
我首先是通过OceanBase的官方学习手册进行学习,一开始就让我不由惊叹,终于不用看英文的了(还是国产好)。这一点就让我有了继续学下去的勇气,之前看Oracle的官方手册必须得配备一个百度翻译,就是这样仍然有一些长句子也不能完全理解。
我在学习过程中也会与Oracle进行对比理解,以下表格是我总结的一部分,欢迎大佬们指正。
概念 | OceanBase | Oracle |
---|---|---|
数据库类型 | 分布式准内存数据库 | 传统集中式数据库 |
基础设施 | Share-nothing OceanBase使用Paxos 协议维持多副本强一直,每台服务器(Observer)都是可以看做是一个数据库节点,不会共享任何设备 | Share-disk 以Oracle Rac集群为例,需要共享存储,数据都是放在共享存储上 |
进程 | OS上只有一个observer进程 | 按照按照不同的工作目的存在多个进程,例如:DBWR、MON、CKPT等 |
存储 | 准内存数据库,数据基于基于 LSM-Tree 的架构,分为memtable和sstable,及内存增量数据与磁盘基线数据 | 数据存储路径:表空间-数据文件-段-区段-数据库块-OS块 |
多租户 | 支持多租户-提供oracle模式或者mysql模式,分别兼容oracle和mysql | Oracle12C以后支持多租户,即CDB和PDB |
数据库内存 | Observer 总内存 由memory_limit或者memory_limit_percentage参数控制 | 由参数SGA+PGA或者memory_target控制 |
配置项 | 分为参数和变量,参数可以是集群级或者是租户级,变量可以分为全局或者会话,两者控制的特性不一致 | 12.2版本以后参数可以是集群级也可以是租户级别,不同的节点参数可以不同,变量与参数功能类似 |
租户内存 | 租户内存是按照创建租户时指定的资源规格大小和数量决定。分为不可伸缩内存MemStore(增量数据默认租户内存的50%)和KvCache(可动态伸缩)内存 | 可以修改某个PDB的SGA和PGA参数控制租户可有内存大小 |
数据一致性 | Paxos 分布式选举确保每个分区总是能够选出唯一的 Leader,由 Leader 将日志同步到 Follower。只有日志同步到多数派并且写盘成功,才认为事务执行成功 | 拿ADG举例,采用的是传输Redo log同步,可以分为最大性能模式、最大可用模式、最大保护模式三种,不同模式对数据一致性、可用性有不同的影响 |
执行计划管理 | 支持执行计划缓存避免硬解析,可以单独设置执行计划缓存大小,绑定执行计划、支持Hint,不提供手动收集统计信息 | 支持执行计划缓存避免硬解析,存储在share Pool中,支持绑定执行计划、支持Hint;通过SPM对基线等进行管理,更强大。支持手动收集统计信息 |
是否支持分布式事务 | 是 | 否 |
分区 | 支持-每个单表也是按照一个分区表进行管理 | 支持 |
表 | 索引组织表(IOT) | 堆表、索引组织表、嵌套表、临时表等 |
索引 | B树索引 | B树索引、位图索引、反向索引等 |
视图 | 支持 | 支持 |
存储过程自定义函数、匿名块 | 支持 | 支持 |
资源管理器 | 不支持 | 支持 |
Schedule | 不支持 | 支持 |
闪回 | 只支持闪回查询 | 功能更强大支持数据库的闪回、事务的闪回、多版本等 |
回收站 | 支持,支持truncate | 支持,不支持truncate |
备份恢复 | 支持逻辑备份和物理备份,由于OB集群自身的多副本以及多地多中心的部署方式能够保证数据的高可用,备份和恢复的重要度不是特别高 | 支持逻辑备份和恢复,恢复级别可以是数据库、表空间、表、数据块,物理架构决定Oracle必须有强大的备份恢复体系来保证数据的高可用性 |
另外与传统数据库相比,在自学的时候没办法自己搭建一套学习环境,因为分布式数据库对环境要求比较高,没办法使用一个或两个虚拟机就可以,OB由于要满足副本的多数派需要至少搭建一个同城三中心的OB集群,而且对内存和存储有很高的要求,所以我就只能默默学习了,大家都知道有实验环境更能加深理解,对学习来说事半功倍。好在现在可以在阿里云上购买实验卷,进行环境搭建测试,或者报名恩墨的OBCP培训也会提供一套环境进行学习实验。
总体来说,如果有其他关系型数据库的经验,那么入门OceanBase会比较简单,而且官方文档以及配套学习视频都比较易懂,从浅至深、从总体到内部,一点点的让我迈入分布式数据库的大门,经过学习也通过了OBCA的考试认证,也参加了恩墨的OBCP培训并通过了OBCP的认证考试,OBCP的课程让我对OceanBase有了一个更加深入和全面的认识,但这仅仅是一个开始,跟其他数据库一样如果要成为资深的OceanBase的DBA,需要一个很长的经验积累,相信随着国产数据库的普及,以及当前的背景下,这样的挑战和机会也会越来越多的。
最后再说一下OBCP的考试,OBCP的考试目前知识点比较集中,没有Mysql或者Oracle体系那么庞大,但是随着OBCP版本的快速迭代,OBCP知识点也会越来越全面,另外考试的目的是为了学习和验证自己的学习成果,尽量不要为了考试而考试(因为眼下一般公司不会你有一个OceanBase证书而给你多涨一些工资,未来说不定)。