前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OceanBase初试

OceanBase初试

作者头像
jeanron100
发布2021-09-02 11:37:06
8110
发布2021-09-02 11:37:06
举报
文章被收录于专栏:杨建荣的学习笔记

这是学习笔记的第 2369篇文章

OceanBase是原生分布式关系数据库软件,开源已经有些日子了,一直拖着没有做一些测试。这两天刻意抽时间做了下测试,还是挺惊喜的。

我是比较喜欢上手试验的风格,所以我的学习模式是先构建出一个简单的环境,然后根据自己的认知去做一些测试来决定要不要继续深入测试,然后再来看相关的文档来系统学习,所以我根据文档的描述初步选定是体验试用版本。

OceanBase的试用版链接已经失效了,在官方文档中没有及时更新,我是翻箱倒柜在网络上找了很多的文章和说明,才发现通过一个链接入口可以直达试用版:

https://www.oceanbase.com/download

根据链接跳转到的界面是这样的,这个对应不是最新的版本,不过作为体验测试是足够了。

比较贴心的是在试用版的相关文档中有一个视频,演示了整个部署的过程,几个命令即可搞定。

我们先来创建用户admin和相关的数据目录

代码语言:javascript
复制
# useradd admin
# passwd admin
# mkdir /data/ob
# chown -R admin.admin /data/ob

接下来修改配置文件config.py,修改相应的数据目录

代码语言:javascript
复制
load('obi,obt-patch,mini-mode,sample-db,sysbench')

if not indocker():
    home = '/data/ob'
obs_cfg.update(mini_mode_cfg)
obs_cfg.update(system_memory='5G', memory_limit='8G', datafile_size='10G')
# 定义一个单server的ob集群,mysql端口号2881,rpc端口号2882
ob1 = OBI('127.0.0.1:2882:2881')
# 定义另一个单server的ob集群,mysql端口号/rpc端口号由uid hash生成
ob2 = OBI('127.0.0.1')
# 单个机器上起3个observer
ob3 = OBI('127.0.0.1@[z1,z2,z3]', dev='lo', is_local=True)

接下来切换到admin用户,开始安装

代码语言:javascript
复制
$ ./hap.py  ob1.reboot

大概1分钟左右即可搞定试用版的部署。

连接至OB环境可以使用hap.py脚本

代码语言:javascript
复制
$ ./hap.py  ob1.obmysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3221487878
Server version: 5.7.25 OceanBase 2.2.50 (r1-1c6441e8fb858c80da395f934f67ed305425864e) (Built Mar  6 2020 18:41:01)
Copyright (c) 2009-2020 Percona LLC and/or its affiliates
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
OceanBase(root@oceanbase)>

有一种无缝使用MySQL的感觉,目前这个版本(2.2.50)支持的是5.7的相关协议,查看使用版本。

代码语言:javascript
复制
OceanBase(root@SYS)>select * from v$version;
+---------------------------------------------------------------------------------------------+--------+
| BANNER                                                                                      | CON_ID |
+---------------------------------------------------------------------------------------------+--------+
| OceanBase 2.2.50 (r1-1c6441e8fb858c80da395f934f67ed305425864e) (Built Mar  6 2020 18:41:01) |      0 |
+---------------------------------------------------------------------------------------------+--------+
1 row in set (0.00 sec)

查看数据库列表,可以看到基本保持了MySQL的风格,当然也有Oracle的影子,看文档的描述是按照租户的模式来设计的。

代码语言:javascript
复制
OceanBase(root@test)>show databases;
+--------------------+
| Database           |
+--------------------+
| oceanbase          |
| information_schema |
| mysql              |
| SYS                |
| LBACSYS            |
| ORAAUDITOR         |
| test               |
+--------------------+
7 rows in set (0.00 sec)

那存储引擎是怎么体现的呢,在这里存储引擎就是OceanBase,支持事务。

代码语言:javascript
复制
OceanBase(root@test)>show engines;
+-----------+---------+-----------------------+--------------+----+------------+
| Engine    | Support | Comment               | Transactions | XA | Savepoints |
+-----------+---------+-----------------------+--------------+----+------------+
| OceanBase | YES     | Supports transactions | YES          | NO | NO         |
+-----------+---------+-----------------------+--------------+----+------------+
1 row in set (0.01 sec)

我们创建一张表,来看看原本MySQL的语法是否适用。

代码语言:javascript
复制
OceanBase(root@test)>CREATE TABLE `data_detail_202107` (
    ->   `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
 ...


    ->   `value` int(11) NOT NULL DEFAULT '0' COMMENT '数据值',
    ->   `modify_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
    ->   `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    ->   `note` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
    ->   PRIMARY KEY (`id`),
    ->   KEY `idx_rlb_id` (`rlb_id`,`cycle_num`,`member_id`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='数据明细表';
Query OK, 0 rows affected, 1 warning (0.16 sec)

没想到还是执行成功了,只是抛出了警告。

代码语言:javascript
复制
OceanBase(root@test)>show warnings;
+---------+------+---------------------------------+
| Level   | Code | Message                         |
+---------+------+---------------------------------+
| Warning | 1286 | Unknown storage engine 'InnoDB' |
+---------+------+---------------------------------+
1 row in set (0.00 sec)

数据字典有一个视图views,完整的SQL语句是比较长的,我们来查看执行计划,直接使用了Hash Join

代码语言:javascript
复制
>explain select * from views\G
*************************** 1. row ***************************
Query Plan: ====================================
|ID|OPERATOR   |NAME|EST. ROWS|COST|
------------------------------------
|0 |HASH JOIN  |    |156      |4566|
|1 | TABLE SCAN|d   |100      |2000|
|2 | TABLE SCAN|t   |100      |2000|
====================================

其实show create table是很有代表性的,可以通过这个看到很多OceanBase中的设计点。

代码语言:javascript
复制
OceanBase(root@test)>show create table data_detail_202107\G
*************************** 1. row ***************************
       Table: data_detail_202107
Create Table: CREATE TABLE `rlb_award_detail_202107` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
 。。。


  `value` int(11) NOT NULL DEFAULT '0' COMMENT '数据值',
  `modify_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `note` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
  PRIMARY KEY (`id`),
  KEY `idx_rlb_id` (`rlb_id`, `cycle_num`, `member_id`) BLOCK_SIZE 16384 GLOBAL
) AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.0' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 10 COMMENT = '数据明细表'
1 row in set (0.01 sec)

文档中关于Oracle和MySQL的兼容性是比较高的,那么业务就可以最大程度的使用两者的特性功能,总体来说和补充的测试和文档来看,还是有不少的期待。

各大平台都可以找到我

  • 微信公众号:杨建荣的学习笔记
  • Github:@jeanron100
  • CSDN:@jeanron100
  • 知乎:@jeanron100
  • 头条号:@杨建荣的学习笔记
  • 网易号:@杨建荣的数据库笔记
  • 大鱼号:@杨建荣的数据库笔记
  • 腾讯云+社区:@杨建荣的学习笔记
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 我们创建一张表,来看看原本MySQL的语法是否适用。
  • 数据字典有一个视图views,完整的SQL语句是比较长的,我们来查看执行计划,直接使用了Hash Join
  • 各大平台都可以找到我
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档