当前MySQL依然是大多数企业使用的主流数据库,但很多企业从传统企业架构转移到云原生架构,面临如何在保障数据的前提下,完成在不同的运行环境进行灵活迁移的难题。同时,大多数使用数据库的传统企业客户不只包括商业企业,还涉及事业单位,他们对于企业级系统和平台要求颇高。
因此,兼容MySQL的工作一直是OceanBase团队长期工作的重点。就拿OceanBase4.1来说,作为兼容性过程中的一次重大里程碑式的版本,随着MySQL的发展和用户使用需求的变化,OceanBase的MySQL兼容版本也从5.6发展到5.7再到8.0。通过技术迭代和实战检验,能够更好地满足高安全、高性能、高可靠性、高可用性、高开发效率、低维护成本、高可扩展性等企业需求。
兼容MySQL能力全面开放,带来更强大的数据管理能力
据了解,目前MySQL8.0最重要的新增功能特性有五项,分别是窗口函数、公用表表达式、HashJoin、索引管理、资源管理。其中OceanBase4.1版本主要支持窗口函数、公用表表达式、HashJoin、资源管理,由于过去用户对逆序索引需求较少,OceanBase目前暂不支持逆序索引功能。
在窗口函数方面,OceanBase从1.x版本开始就提供了窗口函数功能。相比使用子查询或连接操作,窗口函数往往能提供更好的性能。同时,数据库优化器可以有效地处理窗口函数,降低查询计算的成本。值得一提的是,即使用户在SQL编写中没有使用窗口函数,在部分场景中,OceanBase也会将部分SQL自动改写为包含窗口函数的语句,以提高数据管理性能。
在公用表表达式方面,OceanBase可以自动识别公共子查询,并抽取为公共表表达式。OceanBase从2.0版本开始支持CTE功能,即使用户在SQL编写中未使用CTE,OceanBase也会在改写阶段进行识别并抽取,通过减少子查询执行次数以优化性能。举例来说,在如下SQL和计划中,SELECTc1,MIN(c2)c2,MAX(c3)c3FROMt1GROUPBYc1子查询用了两次,便可抽取成为公共子查询。
支持HashJoin和资源管理,提高数据管理效率
此外,OceanBase一直以来都支持HashJoin算法。与单机数据库不同,OceanBase面向的应用场景很多都涉及海量数据处理。此外,分布式场景下索引(全局)往往需要跨机访问,而通过建索引优化NestedLoopJoin较难达到预期效果。而HashJoin在分布式、大数据量场景通常性能表现更优,因此我们从研发初期就进行了支持。同时,我们也支持NestedLoopJoin以及MergeJoin,这两个Join算法在能利用索引或利用序的场景有性能优势。
同时OceanBase支持更丰富的资源管理策略。从3.x版本开始,OceanBase在Oracle模式中支持了Oracle的资源管理(DBMS_RESOURCE_MANAGER包),与MySQL的resourcemanagement主要针对CPU资源分配不同,OceanBase提供了丰富、灵活的资源管理策略,可以设置多种不同的资源计划,根据消耗情况动态调整资源分配,具备更完备的功能和更多的定制可能性。
据了解,OceanBase也在3.2和4.1版本中,将资源管理能力开放到了OceanBaseMySQL模式。OceanBase资源管理与MySQL8.0资源管理的异同如下:
总的来说,相对于前代版本,OceanBase4.1版本在功能和性能上均有长足的进步,能够兼容MySQL大多数功能,在兼容性体验和数据安全优化层面都登上了新台阶,能够真正让科技普惠更多的金融机构和合作伙伴。