MySQL引擎——TokuDB与RocksDB
文章目录
- 一、环境部署
- 1.1 OS配置
- 1.1.1 关闭防火墙
- 1.1.2 关闭selinux
- 1.1.3 关闭大页
- 1.2 数据库部署
- 1.3 启用tokudb和rocksdb
- 二、引擎对比
- 2.1 TokuDB
- 2.2 RocksDB
一、环境部署
1.1 OS配置
1.1.1 关闭防火墙
systemctl stop firewalld.service #停止防火墙
systemctl disable firewalld.service #禁止开机启动
1.1.2 关闭selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
cat /etc/sysconfig/selinux
1.1.3 关闭大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
1.2 数据库部署
tar xf Percona-Server-8.0.21-12-r7ddfdfe-el7-x86_64-bundle.tar
yum localinstall percona-server-*
...Installing : percona-server-server-8.0.21-12.2.el7.x86_64 4/9
Percona Server is distributed with several useful UDF (User Defined Function) from Percona Toolkit.
Run the following commands to create these functions:
mysql -e "CREATE FUNCTION fnv1a_64 RETURNS INTEGER SONAME 'libfnv1a_udf.so'"
mysql -e "CREATE FUNCTION fnv_64 RETURNS INTEGER SONAME 'libfnv_udf.so'"
mysql -e "CREATE FUNCTION murmur_hash RETURNS INTEGER SONAME 'libmurmur_udf.so'"
See http://www.percona.com/doc/percona-server/8.0/management/udf_percona_toolkit.html for more detailsInstalling : percona-server-rocksdb-8.0.21-12.2.el7.x86_64 5/9 * This release of Percona Server is distributed with RocksDB storage engine.* Run the following script to enable the RocksDB storage engine in Percona Server:ps-admin --enable-rocksdb -u <mysql_admin_user> -p[mysql_admin_pass] [-S <socket>] [-h <host> -P <port>]Installing : percona-server-test-8.0.21-12.2.el7.x86_64 6/9 Installing : percona-server-tokudb-8.0.21-12.2.el7.x86_64 7/9 * This release of Percona Server is distributed with TokuDB storage engine.* Run the following script to enable the TokuDB storage engine in Percona Server:ps-admin --enable-tokudb -u <mysql_admin_user> -p[mysql_admin_pass] [-S <socket>] [-h <host> -P <port>]...systemctl start mysqldcat /data/mysql/logs/error.log | grep 'temporary password'
1.3 启用tokudb和rocksdb
[root@zijie lib]# ps-admin --enable-tokudb -uroot -pZIjie@97125
Checking SELinux status...
INFO: SELinux is disabled.Checking if TokuDB plugin is available for installation ...
INFO: ha_tokudb.so library for TokuDB found at /usr/lib64/mysql/plugin/ha_tokudb.so.Checking location of jemalloc library ...
INFO: jemalloc library needed for TokuDB found at /usr/lib64/libjemalloc.so.1Checking transparent huge pages status on the system...
INFO: Transparent huge pages are currently disabled on the system.Checking if THP_SETTING variable is set to never or madvise in /etc/sysconfig/mysql...
INFO: Variable THP_SETTING is set in /etc/sysconfig/mysql.Checking if LD_PRELOAD variable is set for libjemalloc.so.1 in /etc/sysconfig/mysql...
INFO: Variable LD_PRELOAD for libjemalloc.so.1 is set in /etc/sysconfig/mysql.Checking TokuDB engine plugin status...
INFO: TokuDB engine plugin is not installed.Installing TokuDB engine...
INFO: Successfully installed TokuDB engine plugin.[root@zijie lib]# ps-admin --enable-rocksdb -uroot -pZIjie@97125
Checking if RocksDB plugin is available for installation ...
INFO: ha_rocksdb.so library for RocksDB found at /usr/lib64/mysql/plugin/ha_rocksdb.so.Checking RocksDB engine plugin status...
INFO: RocksDB engine plugin is not installed.Installing RocksDB engine...
INFO: Successfully installed RocksDB engine plugin.root@mysql 17:39: [(none)]> show engines;
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| TokuDB | YES | Percona TokuDB Storage Engine with Fractal Tree(tm) Technology | YES | YES | YES |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| ROCKSDB | YES | RocksDB storage engine | YES | YES | YES |
| InnoDB | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
11 rows in set (0.00 sec)
二、引擎对比
2.1 TokuDB
TokuDB 是 一个支持高并发插入存储引擎,适用 MySQL 和 MariaDB。其独特的 “分形树”索引:提供了将“随机读写” 变成了 “顺序读写” 的功能,从而拥有了高insert性能;使用的块更大,使数据得以更好的压缩。
优点
高压缩比,默认使用zlib进行压缩,尤其是对字符串(varchar,text等)类型有非常高的压缩比,比较适合存储日志、原始数据等。官方宣称可以达到1:12。
在线添加索引,不影响读写操作
HCADER 特性,支持在线字段增加、删除、扩展、重命名操作,(瞬间或秒级完成)
支持完整的ACID特性和事务机制
非常快的写入性能, Fractal-tree在事务实现上有优势,无undo log,官方称至少比innodb高9倍。
支持show processlist 进度查看
数据量可以扩展到几个TB;
不会产生索引碎片;
缺点
不支持外键(foreign key)功能,如果表有外键,切换到 TokuDB引擎后,此约束将被忽略。
TokuDB 不适大量读取的场景,因为压缩解压缩的原因。CPU占用会高2-3倍,但由于压缩后空间小,IO开销低,平均响应时间大概是2倍左右。
online ddl 对text,blob等类型的字段不适用
没有完善的热备工具,只能通过mysqldump进行逻辑备份
适用场景
- 访问频率不高的数据或历史数据归档
- 数据表非常大并且时不时还需要进行DDL操作
2.2 RocksDB
RocksDB是由 Facebook 基于 LevelDB 开发的一款提供键值存储与读写功能的 LSM-tree 架构引擎。用户写入的键值对会先写入磁盘上的 WAL (Write Ahead Log),然后再写入内存中的跳表(SkipList,这部分结构又被称作 MemTable)。LSM-tree 引擎由于将用户的随机修改(插入)转化为了对 WAL 文件的顺序写,因此具有比 B 树类存储引擎更高的写吞吐。内存中的数据达到一定阈值后,会刷到磁盘上生成 SST 文件 (Sorted String Table),SST 又分为多层(默认至多 6 层),每一层的数据达到一定阈值后会挑选一部分 SST 合并到下一层,每一层的数据是上一层的 10 倍(因此 90% 的数据存储在最后一层)。RocksDB 允许用户创建多个 ColumnFamily ,这些 ColumnFamily 各自拥有独立的内存跳表以及 SST 文件,但是共享同一个 WAL 文件,这样的好处是可以根据应用特点为不同的 ColumnFamily 选择不同的配置,但是又没有增加对 WAL 的写次数。
优点
- innodb空间浪费, B tree分裂导致page内有较多空闲,page利用率不高。innodb现有的压缩效率也不高,压缩以block为单位,也会造成浪费。
- 写入放大:innodb 更新以页为单位,最坏的情况更新N行会更新N个页。RocksDB append only方式 另外,innodb开启double write也会增加写入。
- RocksDB对齐开销小:SST file (默认2MB)需要对齐,但远大于4k, RocksDB_block_size(默认4k) 不需要对齐,因此对齐浪费空间较少
- RocksDB索引前缀相同值压缩存储,节省空间
- RocksDB占总数据量90%的最底层数据,行内不需要存储系统列seqid (innodb聚簇索引列包含trxid,roll_ptr等信息)
缺点
- 大value的场景不友好
- 不适于大规模数据的存取
适用场景
- 对写性能要求很高,同时有较大内存来缓存SST块以提供快速读的场景;
- SSD等对写放大比较敏感以及磁盘等对随机写比较敏感的场景;
- 需要变长kv存储的场景;
- 小规模元数据的存取;
MySQL引擎——TokuDB与RocksDB相关推荐
- Percona Server for MySQL 安装TokuDB引擎
Percona Server for MySQL 安装TokuDB引擎 TokuDB主要优点:insert数据比Innodb快的多,数据压缩比要Innodb高 官方文档https://docs.per ...
- MySQL · 引擎特性 · InnoDB 事务子系统介绍
前言 在前面几期关于InnoDB Redo和Undo实现的铺垫后,本节我们从上层的角度来阐述InnoDB的事务子系统是如何实现的,涉及的内容包括:InnoDB的事务相关模块,如何实现MVCC及ACID ...
- MySQL · 引擎分析 · InnoDB行锁分析
前言 理解InnoDB行锁,分析一条SQL语句会加什么样的行锁,会锁住哪些数据范围对业务SQL设计和分析线上死锁问题都会有很大帮助.对于InnoDB的行锁,已经有多篇月报进行了介绍,这里笔者借鉴前面月 ...
- MySQL引擎特性GIS-R-TREE
MySQL引擎特性GIS-R-TREE Geohash用于代表位置的经纬度编码成一个字符串,支持WGS 84 Coordinate System MySQL支持的空间数据类型包括GEOMETRY,PO ...
- 深入浅析mysql引擎
mysql引擎 mysql数据库引擎取决于mysql在安装的时候是如何被编译的.要添加一个新的引擎,就必须重新编译mysql.在缺省情况下,mysql支持三个引擎:ISAM,MYISAM和HEAP.另 ...
- 添加mysql引擎错误
在添加mysql引擎时,可能出现如下错误: Can't open shared library '/usr/local/mysql/lib/mysql/plugin/ha_innodb.so' (er ...
- MySQL · 引擎特性 · InnoDB 崩溃恢复过程
在前面两期月报中,我们详细介绍了 InnoDB redo log 和 undo log 的相关知识,本文将介绍 InnoDB 在崩溃恢复时的主要流程. 本文代码分析基于 MySQL 5.7.7-RC ...
- 15_clickhouse,MySQL引擎;MySQL和ClickHouse中数据类型的对应关系
20.MySQL引擎 20.1.MySQL引擎 20.2.MySQL和ClickHouse中数据类型的对应关系 20.3.示例 20.MySQL引擎 20.1.MySQL引擎 MySQL引擎可实现对M ...
- 【clickhouse】Clickhouse的MySQL引擎同步数据不准确 Decimal
文章目录 1.概述 2. 场景2 2.1 概述 1.概述 我想从MySQL同步数据到Clickhouse,但是发现Clickhouse的MySQL引擎同步数据不准确,精度丢失而且还是不对的.(很多数据 ...
最新文章
- 转自一个面试者的“提示”
- JavaScript初学者编程题(25)
- Linux SVN命令详解
- 有微型计算机广告,广告还会受欢迎?都是斯巴达克显卡惹的“祸”
- 循环序列模型 —— 1.6 语言模型和序列生成
- java ee面试题专家总结(必看),Java EE面试题专家总结(必看)
- 程序员惊魂 12 小时:“���”引发线上事故
- 灰度世界算法(Gray World Algorithm)
- TypeScript系列教程--初探TypeScript
- 【iCore4 双核心板_ARM】例程十八:USBD_VCP实验——虚拟串口
- yml文件配置数据库
- border的属性及写法大全:实线、点线、虚线、双线、混合用法
- ORACLE表空间碎片整理
- 教程篇(7.0) 01. 介绍FortiClient和FortiClient EMS ❀ FortiClient EMS ❀ Fortinet 网络安全专家 NSE 5
- 长视频请回答2020:技术如何让流媒体更“酷”?
- python里美元怎么表示_说说 Python 正则表达式中的插入字符、美元字符
- JS防抖(Debouncing)和节流(Throttling)
- 高中新课程作业本 地理 必修1 参考答案下
- -moz、-ms、-webkit, -o各什么意思
- 数字图像处理之灰度化