社群1月月報|OceanBase 4.1 即將發版,哪些功能將會更新?

OceanBase技術站發表於2023-02-27
我們每個月都會和大家展開一次社群進展的彙報溝通會,希望透過更多的互動交流讓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();
            }
    }
}

相關文章