当前位置:   article > 正文

编译GreatSQL with RocksDB引擎

编译GreatSQL with RocksDB引擎

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项目代码,进行本地编译工作。

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

这其中的 GreatSQL-Build 是我们这次要用到的项目。

3. 编译GreatSQL with RocksDB

先修改 Dockerfile中的部分代码,部分文件改成本地COPY,不再从服务器上下载:

  1. $ cd GreatSQL-Docker/GreatSQL-Build/
  2. $ vim Dockerfile
  3. # 在第19行附近,增加一行
  4. ...
  5.  18 openssl openssl-devel pam-devel readline-devel wget zlib-devel"
  6.  19 COPY ${ENTRYPOINT} /
  7. 20 RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
  8. ...
  9. # 删除原来第44行
  10. ...
  11.  43 curl -o ${OPT_DIR}/${GREATSQL_ENV} ${GREATSQL_BUILD_DOWNLOAD_URL}/${GREATSQL_ENV} > /dev/null 2>&1 && \
  12.  44 chmod +x /*sh ${OPT_DIR}/*sh
  13. ...

修改完后,将不再从服务器上下载 docker-entrypoint.sh 脚本,改用本地文件。

再修改 docker-entrypoint.sh 中的部分代码,启用 RocksDB 编译支持:

  1. # 在第14行后增加一行,最后变成类似下面这样
  2. $ vim docker-entrypoint.sh +14
  3. ...
  4.  14 wget -c -O ${GREATSQL_MAKESH} ${GREATSQL_MAKESH_DOWNLOAD_URL}/${GREATSQL_MAKESH} >> ${MAKELOG} 2>&1 && \
  5.  15 sed -i 's/DWITH_ROCKSDB=.*/DWITH_ROCKSDB=ON \\/ig' ${GREATSQL_MAKESH} >> ${MAKELOG} 2>&1 && \
  6.  16 wget -c -O ${RPCGEN} ${GREATSQL_BUILD_DOWNLOAD_URL}/${RPCGEN} >> ${MAKELOG} 2>&1 && \
  7. ...

这个改动是修改 greatsql-automake.sh 脚本,使其启用 RocksDB 编译支持。

然后执行下面的命令,开始构建一个GreatSQL编译环境的Docker镜像:

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

构建完Docker镜像后,新建一个Docker容器,即可自动完成GreatSQL编译:

  1. # 创建容器
  2. $ docker run -itd --name greatsql greatsql_build bash
  3. # 查看编译进展
  4. $ docker logs greatsql
  5. 0. touch logfile /tmp/greatsql-automake.log
  6. 1. downloading sourcecode tarballs and extract
  7.  1.1 downloading sourcecode tarballs ...
  8.  1.2 extract tarballs ...
  9. 2. compile patchelf
  10. 3. compile GreatSQL
  11.  3.1 compiling GreatSQL
  12.  3.2 remove mysql-test from GreatSQL
  13.  3.3 make dynamic link for GreatSQL
  14. 4. greatsql build completed!
  15. drwxrwxr-x 13 mysql mysql       293 Feb 22 01:33 GreatSQL-8.0.32-25-centos-glibc2.28-x86_64
  16. /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)
  17. 5. remove files and clean up

如果能看到这个字样,就表示GreatSQL已经编译完成了,再执行下面命令确认是否编译产生RocksDB动态库文件:

  1. $ docker exec -it greatsql bash -c "find /opt/GreatSQL-8.0.32-25-centos-glibc2.28-x86_64/ -name ha_rocksdb.so"
  2. /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 :)

全文完。


《深入浅出MGR》视频课程

戳此小程序即可直达B站

https://www.bilibili.com/medialist/play/1363850082?business=space_collection&business_id=343928&desc=0


文章推荐:


779c55f3e5c4d632ff7645388c926a32.png题图由阿里通义万相生成

想看更多技术好文,点个“在看”吧!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/139636
推荐阅读
相关标签
  

闽ICP备14008679号