开发者社区> 妙正灰> 正文

基于 Percona Server for MySQL 体验 MyRocks

简介: RocksDB是facebook基于LevelDB实现的一款可嵌入式的持久化键值(Key-Value)存储数据库,目前为facebook内部大量业务提供服务。由于其有高性能和高适配性的特点,所以被大量的应用于对传统数据库引擎的高性能改造,例如商业数据库引擎 TerarkDB 分布式关系型数据库 TIDB 等都是应用了 ROCKSDB 来实现高性能的。
+关注继续查看

前言

RocksDB是facebook基于LevelDB实现的一款可嵌入式的持久化键值(Key-Value)存储数据库,目前为facebook内部大量业务提供服务。由于其有高性能和高适配性的特点,所以被大量的应用于对传统数据库引擎的高性能改造,例如商业数据库引擎 TerarkDB 分布式关系型数据库 TIDB 等都是应用了 ROCKSDB 来实现高性能的。

介绍

经过 Facebook 大量工作,将 RocksDB 作为 MySQL 的一个存储引擎移植到 MySQL,称之为 MyRocks。 经过多年的发展,MyRocks 已经比较成熟,已进入了facebook MySQL的主分支了。其他 MySQL 分支包括 Percona Server for MySQL 和 MariaDB Server 都集成了 MyRocks。

MyRockS 跑分:http://jetware.io/blog/redmine-performance-on-myrockshttps://www.percona.com/blog/2018/04/30/a-look-at-myrocks-performance/, 本来还想翻译翻译贴图出来的,没想到那么多图

简单放个 QPS 对比吧: MySQL 8.0 InnoDB VS MariaDB 10.3 MyRocks

image

RocksDB与innodb的比较

  • 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等信息)

 Percona MyRocks

Percona MyRocks 是 MyRocks for Percona Server 的实现,安装了 Percona Server 的环境可以非常方便的集成 MyRocks 引擎,和 FaceBook 的 MyRocks 差异在于 事务隔离级别 的实现上。

安装

首先,我们需要安装有 Percona Server,安装教程:Percona Server 5.7 安装教程

安装 percona-server-rocksdb:

RHELCentOS:

yum install Percona-Server-rocksdb-57.x86_64

DeibanUbuntu:

apt-get install percona-server-rocksdb-5.7

安装好后我们回看到这句话:

* 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>]

也就是说我们需要运行相关语句:

运行:

ps-admin --enable-rocksdb -u root -p密码

然后就成功激活插件并关闭 Transparent huge pages 了

mysql> SHOW ENGINES;
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                    | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
| ROCKSDB            | YES     | RocksDB storage engine                                                     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                                      | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                                         | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears)             | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                         | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                                     | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                  | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                             | NULL         | NULL | NULL       |
| MyISAM             | YES     | MyISAM storage engine                                                      | NO           | NO   | NO         |
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
10 rows in set (0.00 sec)

使用

具体如何使用 ROCKSDB 引擎呢?

我们在创建表和修改表的时候,加入 ENGINE=RocksDB 就可以使用了。

例如:

mysql> use mf8biz;
mysql> CREATE TABLE `juncedup_usermeta` (
  `umeta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) unsigned NOT NULL DEFAULT '0',
  `meta_key` varchar(255) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
  `meta_value` longtext COLLATE utf8mb4_unicode_520_ci,
  PRIMARY KEY (`umeta_id`),
  KEY `user_id` (`user_id`),
  KEY `meta_key` (`meta_key`(191))
) ENGINE=RocksDB; 

如果我们想激进一点可以把默认引擎设置为 ROCKSDB:

修改 /etc/my.cnf 文件,在 [mysqld] 下加入:

default-storage-engine=ROCKSDB

然后重启 MySQL 服务即可。

来自我的个人博客:https://www.mf8.biz/percona-server-for-mysql/

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
ChatGPT会取代MySQL DBA吗?(译自Percona,文末投票)
ChatGPT是目前科技界最热门的话题,有人甚至说ChatGPT已经通过了谷歌的3级编程面试。我想知道,这是否意味着ChatGPT也准备好取代MySQL DBA?答案是否定的,让我来告诉你为什么。
9 0
MySQL · myrocks · collation 限制
背景 MyRocks中的数据是按索引列以memcmp方式进行排序的。对于一些数字类型,需要进行转化才能直接通过memcmp进行比较, 例如有符号数在计算机中是用补码表示的,那么如果负数和正数直接按字节比较,结果负数会比正数大,实际存储时会将符号会反转存储,读取时再转化回来。
1454 0
MySQL · myrocks · clustered index特性
Cluster index介绍 最近在RDS MyRocks中,我们引入了一个重要功能,二级聚集索引(secondary clustering index). 我们知道innodb和rocksdb引擎的主键就是clustered index。
1761 0
MySQL · myrocks · 事务锁分析
概述 MyRocks中RocksDB作为基于快照的事务引擎,其在事务支持上有别于InnoDB,有其自身的特点。在早期的月报[myrocks之事务处理] 中,我们对锁的实现有过简单的分析,本文会以一些例子来介绍MyRocks是如果来加锁解锁的。
1846 0
MySQL · myrocks · 相关tools介绍
概述 MyRocks提供了丰富的tools,如sst_dump, mysql_ldb等,这些工具对我们的运维和分析问题非常有用。 sst_dump 可以导出sst中的数据和属性信息。 sst_dump --help sst_dump --file=<data_dir_OR_sst_file> .
3242 0
MySQL · MyRocks · MyRocks参数介绍
以下参数是db级别的,全局有效 参数 说明 备注 rocksdb_block_cache 缓存uncompressed blocks,此cache有分区优化,分区数由table_cache_numshardbits控制,默认为6即64个分区。
2988 0
+关注
妙正灰
解决方案工程师,负责为企业规划上云迁移方案和云上架构设计,在网站建设开发和云计算领域有多年经验,专注于Linux平台的系统维护以及应用部署。致力于以场景化的方式让云计算,用更加通俗易懂的方式让更多人体验云计算,让云端的计算更质朴的落地。
文章
问答
视频
来源圈子
更多
阿里云最有价值专家,简称 MVP(Most Valuable Professional),是专注于帮助他人充分了解和使用阿里云技术的意见领袖阿里云 MVP 奖项为我们提供了这样一个机会,向杰出的意见领袖表示感谢,更希望通过 MVP 将开发者的声音反映到我们的技术路线图上。
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
高效MySQL的N个习惯
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像