阿里云
阿里云多端小程序中小企业获客首选
发表主题 回复主题
  • 958阅读
  • 1回复

基于 Percona Server for MySQL 体验 MyRocks

级别: 论坛版主
发帖
9349
云币
14165
j<V Fn~*_  
[65 `$x-  
前言 hKLCJ#T  
`1$@|FgyC  
]6(N@RC  
RocksDB是facebook基于LevelDB实现的一款可嵌入式的持久化键值(Key-Value)存储数据库,目前为facebook内部大量业务提供服务。由于其有高性能和高适配性的特点,所以被大量的应用于对传统数据库引擎的高性能改造,例如商业数据库引擎 TerarkDB 分布式关系型数据库 TIDB 等都是应用了 ROCKSDB 来实现高性能的。 -:Da&V  
&5fJPv &  
介绍 Xqg@ e:g  
cu7hBf j  
}Gz~nf%  
经过 Facebook 大量工作,将 RocksDB 作为 MySQL 的一个存储引擎移植到 MySQL,称之为 MyRocks。 经过多年的发展,MyRocks 已经比较成熟,已进入了facebook MySQL的主分支了。其他 MySQL 分支包括 Percona Server for MySQL 和 MariaDB Server 都集成了 MyRocks。 `scR*]f1+  
MyRockS 跑分:http://jetware.io/blog/redmine-performance-on-myrocks、[url]https://www.percona.com/blog/2018/04/30/a-look-at-myrocks-performance/[/url], 本来还想翻译翻译贴图出来的,没想到那么多图 /Y W>*?"N  
e6R}0w~G  
C*)3e*T*  
RocksDB与innodb的比较 nm5cpnNl  
Fq~yL!#!  
  • 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等信息
8_BV:o9kL  
5[k/s}g  
 Percona MyRocks z&#SPH*  
;4R$g5-4X  
d6} r#\  
Percona MyRocks 是 MyRocks for Percona Server 的实现,安装了 Percona Server 的环境可以非常方便的集成 MyRocks 引擎,和 FaceBook 的 MyRocks 差异在于 事务隔离级别 的实现上。 ]HKQDc'  
WejY y|  
安装 @r/#-?W  
A!s`[2 Z  
m[? E  
首先,我们需要安装有 Percona Server,安装教程:Percona Server 5.7 安装教程 $2oTkOA   
安装 percona-server-rocksdb: R]}}$R`j  
RHEL\CentOS: ,&]S(|2%>t  
  1. yum install Percona-Server-rocksdb-57.x86_64
kO.%9wFbz  
dpAjR  
Deiban\Ubuntu: YSr9VpqWV  
  1. apt-get install percona-server-rocksdb-5.7
PWaw]*dFmy  
>BIMi^  
?*[N_'2W+  
安装好后我们回看到这句话: ZXqSH${Tp  
  1. * This release of Percona Server is distributed with RocksDB storage engine.
  2. * Run the following script to enable the RocksDB storage engine in Percona Server:
  3.        ps-admin --enable-rocksdb -u <mysql_admin_user> -p[mysql_admin_pass] [-S <socket>] [-h <host> -P <port>]
8p^bD}lN7  
bR*-Ht+wd  
也就是说我们需要运行相关语句: *xx'@e|<;  
运行: ,X[kt z  
  1. ps-admin --enable-rocksdb -u root -p密码
<C1H36p  
"cE7 5  
oX#Q<2z*  
然后就成功激活插件并关闭 Transparent huge pages 了 q-[@$9AS  
  1. mysql> SHOW ENGINES;
  2. +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
  3. | Engine             | Support | Comment                                                                    | Transactions | XA   | Savepoints |
  4. +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
  5. | ROCKSDB            | YES     | RocksDB storage engine                                                     | YES          | YES  | YES        |
  6. | MRG_MYISAM         | YES     | Collection of identical MyISAM tables                                      | NO           | NO   | NO         |
  7. | CSV                | YES     | CSV storage engine                                                         | NO           | NO   | NO         |
  8. | BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears)             | NO           | NO   | NO         |
  9. | InnoDB             | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
  10. | PERFORMANCE_SCHEMA | YES     | Performance Schema                                                         | NO           | NO   | NO         |
  11. | ARCHIVE            | YES     | Archive storage engine                                                     | NO           | NO   | NO         |
  12. | MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                  | NO           | NO   | NO         |
  13. | FEDERATED          | NO      | Federated MySQL storage engine                                             | NULL         | NULL | NULL       |
  14. | MyISAM             | YES     | MyISAM storage engine                                                      | NO           | NO   | NO         |
  15. +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
  16. 10 rows in set (0.00 sec)
f/ ?_  
"9ZID-~]  
;,C)!c&  
使用 9oyE$S h]  
A;;fACF8e  
0[R L>;D:  
具体如何使用 ROCKSDB 引擎 aGrIQq/k)%  
我们在创建表和修改表的时候,加入 ENGINE=RocksDB 就可以使用了。 ,0~^>K  
例如: nno}e/zqf  
  1. mysql> use mf8biz;
  2. mysql> CREATE TABLE `juncedup_usermeta` (
  3.   `umeta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  4.   `user_id` bigint(20) unsigned NOT NULL DEFAULT '0',
  5.   `meta_key` varchar(255) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
  6.   `meta_value` longtext COLLATE utf8mb4_unicode_520_ci,
  7.   PRIMARY KEY (`umeta_id`),
  8.   KEY `user_id` (`user_id`),
  9.   KEY `meta_key` (`meta_key`(191))
  10. ) ENGINE=RocksDB;
(|[2J3ZET  
<":;+ Ng+  
_7Rr=_1}  
如果我们想激进一点可以把默认引擎设置为 ROCKSDB: F f$L|  
修改 /etc/my.cnf 文件,在 [mysqld] 下加入: PXK7b2fE.  
  1. default-storage-engine=ROCKSDB
a=1NED'  
\s/s7y6b+  
3C?f(J}  
然后重启 MySQL 服务即可。
级别: 菜鸟
发帖
72
云币
103
只看该作者 沙发  发表于: 2018-09-30
Re基于 Percona Server for MySQL 体验 MyRocks
第一次听说这个 km)zMoE{c{  
学习了。 8'~[pMn`  
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
验证问题: 1 - 1 = ?
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)