首页 > 数据库 >编译GreatSQL with RocksDB引擎

编译GreatSQL with RocksDB引擎

时间:2024-03-13 11:15:52浏览次数:35  
标签:... RocksDB GreatSQL greatsql 编译 引擎

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 [email protected]: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

标签:...,RocksDB,GreatSQL,greatsql,编译,引擎
From: https://www.cnblogs.com/greatsql/p/18070174

相关文章

  • VScode调用MSVC编译C++文件
    批处理.bat@echooffchcp65001ifnot"%~1"==""(setpos="%~1"&gotorun)set/ppos=工程路径Workspacepath::runcall"E:\ProgramFiles\MicrosoftVisualStudio\2022\Community\Common7\Tools\VsDevCmd.bat"code......
  • node-sass生产环境编译报错
    "node-sass":"^4.12.0","sass-loader":"^8.0.2",本地和local环境正常,pre和生产环境编译报错local、pre、生产的编译环境一样,node版本都是14.16.1。拷贝本地node_modules文件夹到pre同样报错。应该是node-sass和node的版本问题,但是又找不到问题,最后没办法把node-sass换成......
  • Maven - 项目的JDK编译level是1.5,修改不掉??
    背景  idea中的maven项目,父项目和子项目的ProjectStructure的languagelevel都是1.5,怎么修改为8?尝试修改并应用后会失效,还是会自动恢复为1.5。 1、Settings中JavaCompiler中,子项目的Targetbytecodeversion都是1.52、ProjectStructure中的Module的LanguageLevel都是5......
  • 开发中编译时期异常Exception和运行时期异常RuntimeException如何选择
    从实际开发角度来看不管使用哪种都是可以的,业界标准如下如果问题特别严重,开发人员很容易犯,强烈的提醒开发人员注意,那就抛编译时期异常,写完编译不通过就会报错,而后进一步对其处理如果问题不严重,开发人员一般不会出现这种问题,那就抛出运行时期异常,编译通过,后续报错再处理自......
  • Qt--编译安装QWT
    1.下载https://sourceforge.net/projects/qwt/files/2.编译   编译参考如下:1QtCreator打开源码内的qwt.pro,注意:编译器选择Release版本,编译器使用与creator的一样的版本,这里使用msvc201532bit。2打开编译开关,在qwt->otherfiles->qwt.prf中,去掉QMAKE_RPATHDI......
  • Zabbix 7.0编译部署教程
    Zabbix7.0alpha版本、beta版本已经陆续发布,Zabbix7.0LTS版本发布时间也越来越近。据了解,新的版本在性能提升、架构优化等新功能方面有非常亮眼的表现,不少小伙伴对此也已经跃跃欲试。心动不如行动,不妨先体验了一把beta版本。本教程仅适用于编译部署Zabbix7.0beta1版本,部署环境......
  • vscode搭建Renesas开发环境,编译并下载调试
    0windows下安装环境安装pyocd,libusbpipinstallpyocdpipinstalllibusb1使用RASC创建工程(1)创建工程(2)选择CMake(3)创建demo例程,可以先选择NoRTOS,最后点击Finish,创建完成(4)适用于vscode的例程已经创建完成,可以在vscode中打开,进行代码编写2VSCode配置(1)编辑Config......
  • Java的结构、equals字符串判断与反编译
    顺序结构Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句往下执行顺序结构是最简单的算法结构语句与语句之间,框与框之间是按上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构代码举例publicclas......
  • jsoncpp编译错误
    在Ubuntu下面编译jsoncpp的代码时候,爆出大量错误,/usr/include/x86_64-linux-gnu/sys/cdefs.h:41:20:error:missingbinaryoperatorbeforetoken"("#if__GNUC_PREREQ(4,6)&&!defined_LIBC^/usr/include/x86_64-linux-gnu/sys/cdefs.......
  • OpenMP - 编译制导(三)
    ordered制导#include<iostream>#include<omp.h>usingnamespacestd;intmain(intargc,char*argv[]){intd[6];#pragmaompparallelfororderedfor(inti=0;i<6;++i){#pragmaompordered{co......