米Facebook、自社ストレージエンジンとMySQLを組み合わせた「MyRocks」を発表

 米Facebookは8月31日、自社のストレージエンジン「RocksDB」をMySQLに組み合わせた「MyRocks」を発表した。永続的キーバリューストアのRocksDBをMySQLのバックエンドエンジンとして利用できるもので、社内でも利用しているという。

 RocksDBはFacebookが2013年に発表したオープンソースプロジェクト。同社はMySQLを利用してペタバイト級のデータを管理しており、「いいね!」ボタン、コメント、共有などのアクティビティ提供にInnoDBストレージエンジンを利用してきたが、フラッシュストレージ利用時などにInnoDBの性能と信頼性に制限があることから、開発に至った。

 Facebooはすでにフラッシュストレージ向けのKey-Balueストア「RocksDB」をオープンソースで公開しているが、今回発表されたMyRocksは、RocksDBをMySQLのストレージエンジンとして統合するものとなる。RocksDBをバックエンドのストレージと利用しながらMySQLの機能を利用でき、アプリケーションはSQLやMySQLコネクタ経由でRocksDBストレージにアクセスできる。

 特徴としてはページサイズが可変であるため、圧縮効率に優れる点が挙げられている。たとえばページを5KBに圧縮した際、Rocks DBではストレージの利用サイズも5KBだが、InnoDBの場合は8KBとなるという。また、シーケンシャルリード/ライトの数が少なくなり、アップデートの際のストレージI/Oキャパシティの消費が少ない点も挙げている。これらの特徴から、InnoDB利用時と比較してレプリケーションが高速化し、データの読み込みも高速化できるとしている。

 同じスペックのマシンで動くMyRocks(圧縮)、InnoDB(圧縮なし)、InnoDB(圧縮、ページ容量8KB)の3種類でLinkBenchを動かして比較したところ、MyRocksのデータベースサイズはInnoDB(圧縮)の約2分の1に小さくなるなどの結果が得られているという。インスタンスのサイズは、圧縮なしのInnoDBと比較して3.5倍、圧縮ありのInnoDBの2倍、MyRocksの方が小さかったと報告している。

 MyRocksを含むFacebookによるMySQL 5.6のブランチはプロジェクトのWebサイトより入手できる。

MyRocks
https://github.com/facebook/mysql-5.6