OceanBase是原生分布式关系数据库软件,开源已经有些日子了,一直拖着没有做一些测试。这两天刻意抽时间做了下测试,还是挺惊喜的。 我是比较喜欢上手试验的风格,所以我的学习模式是先构建出一个简单的环境,然后根据自己的认知去做一些测试来决定要不要继续深入测试,然后再来看相关的文档来系统学习,所以我根据文档的描述初步选定是体验试用版本。 OceanBase的试用版链接已经失效了,在官方文档中没有及时更新,我是翻箱倒柜在网络上找了很多的文章和说明,才发现通过一个链接入口可以直达试用版: https:www。oceanbase。comdownload 根据链接跳转到的界面是这样的,这个对应不是最新的版本,不过作为体验测试是足够了。 比较贴心的是在试用版的相关文档中有一个视频,演示了整个部署的过程,几个命令即可搞定。 我们先来创建用户admin和相关的数据目录useraddadminpasswdadminmkdirdataobchownRadmin。admindataob 接下来修改配置文件config。py,修改相应的数据目录load(obi,obtpatch,minimode,sampledb,sysbench)ifnotindocker():homedataobobscfg。update(minimodecfg)obscfg。update(systemmemory5G,memorylimit8G,datafilesize10G)定义一个单server的ob集群,mysql端口号2881,rpc端口号2882ob1OBI(127。0。0。1:2882:2881)定义另一个单server的ob集群,mysql端口号rpc端口号由uidhash生成ob2OBI(127。0。0。1)单个机器上起3个observerob3OBI(127。0。0。1〔z1,z2,z3〕,devlo,islocalTrue) 接下来切换到admin用户,开始安装nbsp;。hap。pyob1。reboot 大概1分钟左右即可搞定试用版的部署。 连接至OB环境可以使用hap。py脚本nbsp;。hap。pyob1。obmysqlWelcometotheMySQLmonitor。Commandsendwith;org。YourMySQLconnectionidis3221487878Serverversion:5。7。25OceanBase2。2。50(r11c6441e8fb858c80da395f934f67ed305425864e)(BuiltMar6202018:41:01)Copyright(c)20092020PerconaLLCandoritsaffiliatesCopyright(c)2000,2020,Oracleandoritsaffiliates。Allrightsreserved。OracleisaregisteredtrademarkofOracleCorporationandoritsaffiliates。Othernamesmaybetrademarksoftheirrespectiveowners。Typehelp;orhforhelp。Typectoclearthecurrentinputstatement。OceanBase(rootoceanbase) 有一种无缝使用MySQL的感觉,目前这个版本(2。2。50)支持的是5。7的相关协议,查看使用版本。OceanBase(rootSYS)selectfromvversion;BANNERCONIDOceanBase2。2。50(r11c6441e8fb858c80da395f934f67ed305425864e)(BuiltMar6202018:41:01)01rowinset(0。00sec) 查看数据库列表,可以看到基本保持了MySQL的风格,当然也有Oracle的影子,看文档的描述是按照租户的模式来设计的。OceanBase(roottest)showdatabases;DatabaseoceanbaseinformationschemamysqlSYSLBACSYSORAAUDITORtest7rowsinset(0。00sec) 那存储引擎是怎么体现的呢,在这里存储引擎就是OceanBase,支持事务。OceanBase(roottest)showengines;EngineSupportCommentTransactionsXASavepointsOceanBaseYESSupportstransactionsYESNONO1rowinset(0。01sec) 我们创建一张表,来看看原本MySQL的语法是否适用。 OceanBase(roottest)CREATETABLEdatadetail202107(idint(11)unsignedNOTNULLAUTOINCREMENTCOMMENTid,。。。valueint(11)NOTNULLDEFAULT0COMMENT数据值,modifytimedatetimeNOTNULLDEFAULTCURRENTTIMESTAMPONUPDATECURRENTTIMESTAMPCOMMENT修改时间,createtimedatetimeNOTNULLDEFAULTCURRENTTIMESTAMPCOMMENT创建时间,notevarchar(255)NOTNULLDEFAULTCOMMENT备注,PRIMARYKEY(id),KEYidxrlbid(rlbid,cyclenum,memberid))ENGINEInnoDBDEFAULTCHARSETutf8COMMENT数据明细表;QueryOK,0rowsaffected,1warning(0。16sec) 没想到还是执行成功了,只是抛出了警告。OceanBase(roottest)showwarnings;LevelCodeMessageWarning1286UnknownstorageengineInnoDB1rowinset(0。00sec) 数据字典有一个视图views,完整的SQL语句是比较长的,我们来查看执行计划,直接使用了HashJoinexplainselectfromviewsG1。rowQueryPlan:IDOPERATORNAMEEST。ROWSCOST0HASHJOIN15645661TABLESCANd10020002TABLESCANt1002000 其实showcreatetable是很有代表性的,可以通过这个看到很多OceanBase中的设计点。OceanBase(roottest)showcreatetabledatadetail202107G1。rowTable:datadetail202107CreateTable:CREATETABLEdatadetail202107(idint(11)unsignedNOTNULLAUTOINCREMENTCOMMENTid,valueint(11)NOTNULLDEFAULT0COMMENT数据值,modifytimedatetimeNOTNULLDEFAULTCURRENTTIMESTAMPONUPDATECURRENTTIMESTAMPCOMMENT修改时间,createtimedatetimeNOTNULLDEFAULTCURRENTTIMESTAMPCOMMENT创建时间,notevarchar(255)NOTNULLDEFAULTCOMMENT备注,PRIMARYKEY(id),KEYidxrlbid(rlbid,cyclenum,memberid)BLOCKSIZE16384GLOBAL)AUTOINCREMENT1DEFAULTCHARSETutf8mb4ROWFORMATDYNAMICCOMPRESSIONzstd1。0REPLICANUM1BLOCKSIZE16384USEBLOOMFILTERFALSETABLETSIZE134217728PCTFREE10COMMENT数据明细表1rowinset(0。01sec) 文档中关于Oracle和MySQL的兼容性是比较高的,那么业务就可以最大程度的使用两者的特性功能,总体来说和补充的测试和文档来看,还是有不少的期待。