乐趣区

关于数据库:社区1月月报|OceanBase-41-即将发版哪些功能将会更新

咱们每个月都会和大家开展一次社区停顿的汇报沟通会,心愿通过更多的互动交换让 OceanBase 开源社区更加通明,实现信息共享,也心愿能营造更加轻松的气氛,为大家答疑解惑,让大家畅所欲言。如果您对咱们的社区有任何倡议,欢送在 GitHub 上提 Issues 或 PR,也欢送大家成为 Contributor,参加到社区建设中来。

12 月的社区月报中和大家分享了「OMS 4.0 公布」反对 MySQL 到 OceanBase 4.0 的数据同步和迁徙,那在 1 月份 OceanBase 又有哪些产品动静值得关注呢?本文将会和大家分享在过来一个月 OceanBase 内核的版本迭代以及开发者的共建交换。

内核及生态工具有何停顿?

常常有小伙伴在社区论坛、钉钉技术交换群、GitHub…… 提出的需要,咱们都进行了收集整理,那上面就来分享一下大家最关怀的问题:内核及生态工具的性能开发。

OceanBase 内核 4.1 版本的 性能 都曾经实现开发,目前在测试中,预计将会在 2023 年 3 月份中旬公布,次要包含用户性能和零碎性能。

  • 用户性能:direct path load、index_skip_scan,MySQL GIS,latin1 字符集、主备库(基于归档)等;
  • 零碎性能:4.x 在线降级、系统日志优化、视图性能优化(零碎外部表增加索引)等

4.1 版本迭代的性能远不止这些,如果大家想要理解整个性能需要,能够关注 3 月 25 日的开发者大会,会向大家进行具体的解读,点击报名参会👉大会报名。

随着内核 4.1 版本的公布,在同一时间咱们也会公布一些生态工具,包含以下组件:

  • OBD(包 web 版):除了对内核版本的适配,还提供了白屏局部的能力,让用户能更好的应用部署能力;
  • OCP:推出 OCP Express,OCP Express 资源耗费更低,也不须要部署其余圆数据库,非常适合小规模的集群;

(大家能够间接通过 OBD 部署 OCP Expres,在应用上会有一个比拟对立的体验)

  • ODP(OBProxy)社区版:反对事务外部路由、latin1 字符汇合等;
  • ODC、ob-agent、obcdc 等

OceanBase 开源仓库从哪动手?

上文曾经带和大家分享了 OceanBase 整体的公布打算,上面在来和大家介绍一下 OceanBase 的开源仓库,以及作为开发者如果你想来 OceanBase 玩,能够从哪些仓库动手?

在 OceanBase Pepositories 下蕴含了很多仓库,其中 OceanBase 是咱们的主仓库;进入主仓后,能够先从 Wiki 动手,在 Wiki 中能够看到开发者手册以及 OceanBase 数据库大赛的赛前培训课程,这些都归档在开发者教程中(如图 2)

图 1

图 2

以上为 OceanBase 的根底模块介绍,对于实操,Contributing 章节 会通知大家如何去编译,包含如何配置 IDE 以及如何部署源码编译的 OceanBase 等。

图 3
上面这段代码是 obd.sh 编译后部署 OceanBase 的例子。libtool 是部署工具的依赖,libaio 是 OceanBase 的运行时依赖。obd.sh deploy 会应用上面示例中 single.yaml 的特定配置文件通过 obd 部署 OceanBase。如果你对 OceanBase 内核研发感兴趣,能够参照这个指南进行尝试。另外,如果在你应用过程中发现咱们缺失什么文档,也欢送在下方评论区反馈,咱们十分心愿大家可能给咱们提供倡议。

yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/oceanbase/OceanBase.repo
yum install -y libtool libaio obclient
# go to your oceanbase source code directory and it's subdirectory `tools/deploy`
cd `/your/oceanbase/source/tools/deploy`
# `/your/deploy/home/path` is the directory to deploy oceanbase cluster
./obd.sh prepare -p `/your/deploy/home/path`
./obd.sh deploy -c single.yaml
ob-example

除了内核开发,在 OceanBase 仓库中还有 OceanBase 的利用,或中间件生态。这些仓库的入门老本相较于 OceanBase 内核会更低一些。以 ob-example 为例,ob-example 仓库(如图 4)次要是通知大家不同的语言如何连贯 OceanBase 代码,包含 go 语言、java 语言等等,咱们也欢送宽广的开发者,奉献出大家罕用的语言及中间件的示例代码。

图 4

ob-example 仓库,基于 Gitpod 搭建了在线疾速应用平台,大家能够点击链接间接进入:https://gitpod.io/#https://github.com/oceanbase/ob-example,当你点击 Gitpod 链接时能够将 OceanBase 拉起来。利用这个性能,大家能够不须要借助额定的服务器,就能够体验本人的连贯示例代码是否可能失常拜访 OceanBase。

ob-example 仓库的 Contributors 的章节蕴含了曾经实现的连接器示例和未来须要增加的示例,咱们也心愿有开发者能一起去共建这个仓库。

图 5
咱们每个仓库都蕴含了一个 env.sh(环境筹备)和 run.sh.sh(运行用例);以 java connector 为例,java connector 的环境筹备只须要咱们下载 MySQL Connector 就能够了;在运行用例时,实际上就是编译运行 Test.java;最初给大家展示一个简略的示例程序,该程序会通知大家如何连本机,创立一张表,插入数据,查问数据。如果大家感兴趣能够在环境下来执行一下代码:https://github.com/oceanbase/ob-example/tree/master/java-jdbc

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Test {public static void main(String[] args) {
       try {Class.forName("com.mysql.jdbc.Driver");

            try{Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:2881/test?user=root&password=");
                System.out.println("success to connect OceanBase with java jdbc");
                Statement sm = connection.createStatement();
                String q1="drop table if exists test";
                String q2="CREATE TABLE test(name varchar(36) NOT NULL DEFAULT' ') DEFAULT CHARSET = utf8mb4";
                String q3="insert into test values ('Hello OceanBase')";
                String q4="select * from test limit 1";
                sm.executeUpdate(q1);
                sm.executeUpdate(q2);
                sm.executeUpdate(q3);                  
                ResultSet rs = sm.executeQuery(q4);
                rs.beforeFirst();
                while(rs.next()){String Name = rs.getString("name");
                 System.out.printf("%s\n",Name);
                }
                rs.close();} catch (SQLException se) {System.out.println("error!");
                  se.printStackTrace() ;}
            } catch (Exception ex) {ex.printStackTrace();
            }
    }
}
退出移动版