GreatSQL裡也能用上RocksDB引擎
1. 前言
RocksDB 是基於Facebook 開源的一種支援事務的、高度可壓縮、高效能的MyRocks儲存引擎,特別適用於高度壓縮和大容量的資料。以下是一些關鍵特點:
- 高效能: LSM 樹結構使得RocksDB在寫入密集型負載下表現卓越。它能夠處理大量的寫入操作,並且在寫入操作上有較低的延遲。
- 可壓縮儲存: 具有高度可壓縮的特性,可以有效減小資料在磁碟上的佔用空間。
- 事務支援: 支援 MySQL 的事務語義,這使得它適用於要求事務性支援的應用場景。
- 定製化儲存格式: 允許使用者透過定製化儲存格式來滿足其特定需求。
- 相容性: 相容 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.so
和 lib/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
技術交流群:
微信:掃碼新增
GreatSQL社群助手
微信好友,傳送驗證資訊加群
。