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

$ 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.log1. downloading sourcecode tarballs and extract1.1 downloading sourcecode tarballs ...1.2 extract tarballs ...2. compile patchelf3. compile GreatSQL3.1 compiling GreatSQL3.2 remove mysql-test from GreatSQL3.3 make dynamic link for GreatSQL4. 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 :)

全文完。


《深入浅出MGR》视频课程

戳此小程序即可直达B站

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


文章推荐:

    • MySQL Shell 8.0.32 for GreatSQL编译二进制包

    • 在CentOS环境下编译GreatSQL src.rpm包,并再编译RPM包

    • 在openEuler环境下快速编译GreatSQL RPM包

    • 在CentOS环境下编译GreatSQL RPM包

    • GreatSQL 8.0.32-25来了

    • GreatSQL一个关于主从复制的限制描述与规避

    • MTS性能监控你知道多少

    • MySQL对derived table的优化处理与使用限制

    • MySQL一次大量内存消耗的跟踪

    • Myloader导入更快吗?并没有。。。

    • 重现一条简单SQL的优化过程


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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/263210.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt 事件

1. 事件 事件是对各种应用程序需要知道的由应用程序内部或者外部产生的事情或者动作的通称。在Qt中使用一个对象来表示一个事件,它继承自QEvent类。 2. 事件和信号 事件与信号并不相同,比如我们使用鼠标点击了一下界面上的按钮,那么就会产生…

微服务三十五关

1.微服务有什么好处? 微服务优点很多,但是我们通常说一个东西好肯定会跟另一个东西比较, 通常说微服务好会和单体项目进行比较。以下是微服务相对于单体项目的一些显著好处: 首先,让我们讨论单体项目的一些主要缺点&a…

uniapp腾讯地图JavaScript Api,H5端和原生APP端可用

因项目需要,在uniapp中集成使用腾讯地图,为了方便维护,希望通过一套代码实现H5和APP同时可用。H5显示相对简单,APP端比较麻烦,记录下实现过程 一、集成步骤 1.使用 renderjs script标签使用renderjs,因为…

Java基础之lambda表达式(五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

C# If与Switch的区别

在 switch 语句中使用表达式比较时,编译器会生成一个查找表,其中包含所有表达式的值和对应的 case 标签。因此,与使用常量或字面量比较相比,使用表达式比较可能会略微降低性能。 只有当 switch 语句中的所有 case 标签都使用常量或…

Java编程实战:构建医疗信息管理新平台

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

【C++私房菜】面向对象中的多态

文章目录 一、多态二、对象的静态类型和动态类型三、虚函数和纯虚函数1、虚函数2、虚析构函数3、抽象基类和纯虚函数4、多态的原理 四、重载、覆盖(重写)、隐藏(重定义)的对比 一、多态 OOP的核心思想是多态性(polymorphism)。多态性这个词源自希腊语,其含义是“多…

基于MPPT最大功率跟踪算法的涡轮机控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于MPPT最大功率跟踪算法的涡轮机控制系统simulink建模与仿真.mppt采用爬山法实现,仿真输出MPPT控制效果,功率,转速等。 2.系统仿真结果 …

ELK入门(四)-logstash

Logstash Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的存储库中。 Logstash 能够动态地采集、转换和传输数据,不受格式或复杂度的影响。利用 Grok 从非结构化数据中…

电脑开机蓝屏错误代码c000021a怎么办 电脑蓝屏报错c000021a的解决办法

很多小伙伴在电脑开机的时候出现蓝屏代码c000021a都不知道该怎么去解决,所以今天就给你们带来了c000021a蓝屏解救方法,如果你还没解决的话就快来看看吧。 解决办法: 原因: c000021a蓝屏的原因有很多,主要有以下几种…

常用的函数式接口(Supplier、Consumer、Predicate、Function)

目录 一.函数式接口作为方法的参数 二.函数式接口作为方法的返回值 三.常用的函数式接口 3.1生产型Supplier接口 3.2消费型Consumer接口 抽象方法:accept 默认方法:andThen 3.3判断型Predicate接口 抽象方法:test 默认方法&#xf…

从上燃动力到未势能源,氢能领风者不再蛰伏

“世间本来没有路,人们沿着这条道走多了就变成了路。” 2021年,长城控股集团未势能源科技有限公司总裁陈雪松在一次论坛上,用这句话来形容氢能的发展。冥冥之中,未势能源的命运也像这句话描述的那样,从荒原中走出了一…

报错:org.springframework.jdbc.BadSqlGrammarException:

//报错 2024-02-24 19:44:10.814 ERROR 6184 --- [nio-9090-exec-5] c.e.exception.GlobalExceptionHandler : 异常信息: org.springframework.jdbc.BadSqlGrammarException: GPT: 根据异常信息,这是一个Spring框架抛出的BadSqlGrammar…

[算法沉淀记录] 排序算法 —— 归并排序

排序算法 —— 归并排序 算法介绍 归并排序是一种分治算法,由约翰冯诺伊曼在1945年发明。它的工作原理是将未排序的列表划分为n个子列表,每个子列表包含一个元素(包含一个元素的列表被认为是有序的),然后重复合并子列表以生成新的有序子列表…

【深入理解设计模式】原型设计模式

原型设计模式 原型设计模式(Prototype Pattern)是一种创建型设计模式,它允许通过复制已有对象来创建新对象,而无需直接依赖它们的具体类。这种模式通常用于需要频繁创建相似对象的场景,以避免昂贵的创建操作或初始化过…

openGauss学习笔记-227 openGauss性能调优-系统调优-其他因素对LLVM性能的影响

文章目录 openGauss学习笔记-227 openGauss性能调优-系统调优-其他因素对LLVM性能的影响 openGauss学习笔记-227 openGauss性能调优-系统调优-其他因素对LLVM性能的影响 LLVM优化效果不仅依赖于数据库内部具体的实现,还与当前所选择的硬件环境等有关。 表达式调用C…

从零开始学逆向:理解ret2syscall

1.题目信息 链接:https://pan.baidu.com/s/19ymHlZZmVGsJHFmmlwww0w 提取码:r4el 首先checksec 看一下保护机制 2.原理 ret2syscall 即控制程序执行系统调用来获取 shell 什么是系统调用? 操作系统提供给用户的编程接口是提供访问操作系统所管理的底层硬件的接口本质上是…

面试经典150题——两数之和

"Success is not the key to happiness. Happiness is the key to success. If you love what you are doing, you will be successful." - Albert Schweitzer 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力求解 暴力求解是比较干脆果断的一种解决问题的方式…

Selenium浏览器自动化测试框架详解

selenium简介 介绍 Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google C…

构建生物医学知识图谱from zero to hero (4):通过Neo4j构建知识图谱

图数据库是一种专门用于存储图形数据的 NoSQL 数据库。与传统的关系型数据库和其他 NoSQL 数据库不同,图数据库利用图形数据模型来存储和管理数据。图形数据模型由节点和边组成,节点代表实体,边代表实体之间的关系。例如,在社交网络中,用户可以表示为节点,朋友关系可以表…