編譯GreatSQL with RocksDB引擎

GreatSQL發表於2024-03-13

GreatSQL裡也能用上RocksDB引擎

1. 前言

RocksDB 是基於Facebook 開源的一種支援事務的、高度可壓縮、高效能的MyRocks儲存引擎,特別適用於高度壓縮和大容量的資料。以下是一些關鍵特點:

  1. 高效能: LSM 樹結構使得RocksDB在寫入密集型負載下表現卓越。它能夠處理大量的寫入操作,並且在寫入操作上有較低的延遲。
  2. 可壓縮儲存: 具有高度可壓縮的特性,可以有效減小資料在磁碟上的佔用空間。
  3. 事務支援: 支援 MySQL 的事務語義,這使得它適用於要求事務性支援的應用場景。
  4. 定製化儲存格式: 允許使用者透過定製化儲存格式來滿足其特定需求。
  5. 相容性: 相容 MySQL 的 API 和協議。使用者可以將 Percona RocksDB 作為替代儲存引擎,以滿足特定的效能和壓縮需求。

總體而言,RocksDB是為了應對大規模、寫入密集型的工作負載而設計的,尤其適用於像 Facebook 這樣需要高度可壓縮、高效能、事務支援的應用場景。

GreatSQL是從Percona Server For MySQL fork過來的,因此也能在GreatSQL中用上RocksDB引擎。但是因為在GreatSQL中進行了MGR最佳化,部分程式碼和RocksDB引擎有衝突,因此在預設啟用MGR的時候就得關閉RocksDB引擎。在需要RocksDB引擎但不需要MGR的場景下,可以採用本文的方法自行編譯以支援RocksDB引擎。

2. 構建編譯環境

下載GreatSQL-Docker倉庫,並參考其中的GreatSQL-Build專案程式碼,進行本地編譯工作。

$ mkdir -p /opt && cd /opt
$ git clone git@gitee.com:GreatSQL/GreatSQL-Docker.git
$ cd GreatSQL-Docker
$ ls
deppkgs  GreatSQL  GreatSQL-Build  GreatSQL-Shell  GreatSQL-Shell-Build  LICENSE  README.md

這其中的 GreatSQL-Build 是我們這次要用到的專案。

3. 編譯GreatSQL with RocksDB

先修改 Dockerfile中的部分程式碼,部分檔案改成本地COPY,不再從伺服器上下載:

$ cd GreatSQL-Docker/GreatSQL-Build/
$ vim Dockerfile

# 在第19行附近,增加一行
...
 18 openssl openssl-devel pam-devel readline-devel wget zlib-devel"
 19 COPY ${ENTRYPOINT} /
20 RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
...

# 刪除原來第44行
...
 43 curl -o ${OPT_DIR}/${GREATSQL_ENV} ${GREATSQL_BUILD_DOWNLOAD_URL}/${GREATSQL_ENV} > /dev/null 2>&1 && \
 44 chmod +x /*sh ${OPT_DIR}/*sh
...

修改完後,將不再從伺服器上下載 docker-entrypoint.sh 指令碼,改用本地檔案。

再修改 docker-entrypoint.sh 中的部分程式碼,啟用 RocksDB 編譯支援:

# 在第14行後增加一行,最後變成類似下面這樣
$ vim docker-entrypoint.sh +14
...
 14 wget -c -O ${GREATSQL_MAKESH} ${GREATSQL_MAKESH_DOWNLOAD_URL}/${GREATSQL_MAKESH} >> ${MAKELOG} 2>&1 && \
 15 sed -i 's/DWITH_ROCKSDB=.*/DWITH_ROCKSDB=ON \\/ig' ${GREATSQL_MAKESH} >> ${MAKELOG} 2>&1 && \
 16 wget -c -O ${RPCGEN} ${GREATSQL_BUILD_DOWNLOAD_URL}/${RPCGEN} >> ${MAKELOG} 2>&1 && \
...

這個改動是修改 greatsql-automake.sh 指令碼,使其啟用 RocksDB 編譯支援。

然後執行下面的命令,開始構建一個GreatSQL編譯環境的Docker映象:

$ docker build -t greatsql_build .
Sending build context to Docker daemon  20.48kB
Step 1/8 : FROM centos:8
 ---> 5d0da3dc9764
Step 2/8 : ENV LANG en_US.utf8
...

構建完Docker映象後,新建一個Docker容器,即可自動完成GreatSQL編譯:

# 建立容器
$ docker run -itd --name greatsql greatsql_build bash

# 檢視編譯進展
$ docker logs greatsql
0. touch logfile /tmp/greatsql-automake.log

1. downloading sourcecode tarballs and extract
 1.1 downloading sourcecode tarballs ...
 1.2 extract tarballs ...

2. compile patchelf

3. compile GreatSQL
 3.1 compiling GreatSQL
 3.2 remove mysql-test from GreatSQL
 3.3 make dynamic link for GreatSQL

4. greatsql build completed!
drwxrwxr-x 13 mysql mysql       293 Feb 22 01:33 GreatSQL-8.0.32-25-centos-glibc2.28-x86_64
/opt/GreatSQL-8.0.32-25-centos-glibc2.28-x86_64/bin/mysqld  Ver 8.0.32-25 for Linux on x86_64 (GreatSQL, Release 25, Revision 79f57097e3f)

5. remove files and clean up

如果能看到這個字樣,就表示GreatSQL已經編譯完成了,再執行下面命令確認是否編譯產生RocksDB動態庫檔案:

$ docker exec -it greatsql bash -c "find /opt/GreatSQL-8.0.32-25-centos-glibc2.28-x86_64/ -name ha_rocksdb.so"
/opt/GreatSQL-8.0.32-25-centos-glibc2.28-x86_64/lib/plugin/ha_rocksdb.so

可以看到成功編譯出RocksDB動態庫檔案,可以將編譯生成的GreatSQL二進位制檔案複製到宿主機上使用。

如果還想同時用上GreatSQL Rapid引擎,可以下載GreatSQL二進位制包,解壓縮,提取其中的 lib/plugin/ha_rapid.solib/private/libduckdb.so 動態庫檔案,放置到相應目錄下即可。

接下來就可以體驗在GreatSQL下使用更穩定可靠的MGR,以及壓縮率很高的RocksDB引擎和查詢效能更高的Rapid引擎。


Enjoy GreatSQL 😃

關於 GreatSQL

GreatSQL是適用於金融級應用的國內自主開源資料庫,具備高效能、高可靠、高易用性、高安全等多個核心特性,可以作為MySQL或Percona Server的可選替換,用於線上生產環境,且完全免費併相容MySQL或Percona Server。

相關連結: GreatSQL社群 Gitee GitHub Bilibili

GreatSQL社群:

社群部落格有獎徵稿詳情:https://greatsql.cn/thread-100-1-1.html

image-20230105161905827

技術交流群:

微信:掃碼新增GreatSQL社群助手微信好友,傳送驗證資訊加群

image-20221030163217640

相關文章