LoginSignup
4
4

More than 5 years have passed since last update.

Facebookが公開した新しいMySQL用ストレージエンジン「MyRocks」を試してみる 〜インストール編〜

Last updated at Posted at 2016-09-22

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イメージ転がってないかな〜 :kissing:
と思ったらホントにありました :raised_hands:
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です :thumbsup:

ここで再び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

インストール編なのでここまで!
ベンチマークを取ったりとかはまた後日ということで。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4