FacebookはMySQL用の新しいストレージエンジン「MyRocks」をオープンソースで公開しました。
http://www.publickey1.jp/blog/16/facebookmysqlmyrocks.html
MyRocksは、InnoDBがフラッシュストレージと組み合わせたときに書き込まれるデータ量の効率性を改善するためにFacebookが取り組んだストレージエンジンです。
2013年にキーバリューストアとして公開したRocksDBをMySQLに統合させたものを基盤としています。
ストレージ効率の面で非常に優れていて、圧縮機能を用いたInnoDBとの比較でもMyRocksは書き込まれるデータ量が圧倒的に小さいそうな。
うむ、気になる。てなわけで早速試してみましょう(☝ ՞ਊ ՞)☝
MyRocksを使用する方法はfacebookのgithubのwikiに記載してあります。
https://github.com/facebook/mysql-5.6/wiki/Getting-Started-with-MyRocks
MySQLをソースから落としてビルドする形ですね。
これに従ってやっても良いんですが、、
もうちょっとさくっと試したいな〜どっかにMyRocksのDockerイメージ転がってないかな〜
と思ったらホントにありました
https://www.percona.com/blog/2016/09/06/myrocks-docker-images/
perconadbさんが作ってくれてましたね。感謝!
ではではDockerイメージを落として使ってみます。
既にDocker for Macを入れてある前提で
DockerレジストリからのDockerイメージのダウンロードをします。
docker pull perconalab/myrocks
完了したらイメージからコンテナを作成します。
docker run -d --name myr -P perconalab/myrocks
そして手順通りMacからmysqlコマンドで接続
mysql -h127.0.0.1
RROR 1130 (HY000): Host 'gateway' is not allowed to connect to this MySQL server
・・んん?普通にエラった(*´д`) 接続許可がされてないですね
仕方ないからコンテナに入って接続
(mysqlコマンドのパスが通ってなかったので後で通すことにします)
$ docker exec -it myr bash
[root@84e0d99b1244 /]# /usr/local/mysql/bin/mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.6.27 Source distribution
Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
接続したらMyRocksのストレージエンジンが存在するか確認しましょう。
mysql> show engines;
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| ROCKSDB | DEFAULT | RocksDB storage engine | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| MyISAM | YES | MyISAM storage engine | 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 |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| InnoDB | NO | Supports transactions, row-level locking, and foreign keys | NULL | NULL | NULL |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
ROCKSDBがあったらOKです
ここで再びgithubのwikiに戻り、wikiに書いてある通りテーブルを作成してみます
CREATE TABLE `linktable` (
`id1` bigint(20) unsigned NOT NULL DEFAULT '0',
`id1_type` int(10) unsigned NOT NULL DEFAULT '0',
`id2` bigint(20) unsigned NOT NULL DEFAULT '0',
`id2_type` int(10) unsigned NOT NULL DEFAULT '0',
`link_type` bigint(20) unsigned NOT NULL DEFAULT '0',
`visibility` tinyint(3) NOT NULL DEFAULT '0',
`data` varchar(255) NOT NULL DEFAULT '',
`time` bigint(20) unsigned NOT NULL DEFAULT '0',
`version` int(11) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (link_type, `id1`,`id2`) COMMENT 'cf_link_pk',
KEY `id1_type` (`id1`,`link_type`,`visibility`,`time`,`version`,`data`) COMMENT 'rev:cf_link_id1_type'
) ENGINE=RocksDB DEFAULT COLLATE=latin1_bin;
一応テーブル情報の確認。
mysql> show table status \G
*************************** 1. row ***************************
Name: linktable
Engine: ROCKSDB
インストール編なのでここまで!
ベンチマークを取ったりとかはまた後日ということで。