Facebook、新しいMySQL用ストレージエンジン「MyRocks」をオープンソースで公開。フラッシュに適したデータの書き込みと圧縮効果
FacebookはMySQL用の新しいストレージエンジン「MyRocks」をオープンソースで公開しました。同社のエンジニアである松信嘉範(Yoshinori Matunobu)氏がFacebookのブログに投稿した記事「MyRocks: A space- and write-optimized MySQL database」で紹介しています。
MySQLのデータベースエンジンとして使われているInnoDBは優れているものの、フラッシュストレージと組み合わせたときに書き込まれるデータ量の効率性などに課題があったため、MyRocksに取り組んだと説明されています。
InnoDB is great for performance and reliability, but there are some inefficiencies on space and write amplification with flash. To help optimize for more storage efficiency, we decided to investigate an alternative space- and write-optimized database technology.
InnoDBは性能や信頼性の面で優れていましたが、フラッシュストレージにおけるデータ量や書き込みの面で非効率なところがありました。ストレージ効率をより最適なものにしようと、私たちはデータ量と書き込みの最適化に取り組もうと決心しました。
MyRocksは、同社が2013年にキーバリューストアとして公開したRocksDBをMySQLに統合させたものを基盤としています。
同じデータの書き込みに対して、MyRocksはInnoDBのデータベース圧縮機能よりもさらに小さいデータ容量を実現でき、また実際に書き込むデータも小さくなるため、コストあたりの容量に制限があり、しかも書き込みに対する耐久性に対して課題を抱えているフラッシュストレージの利用に対して、より適した仕組みになっているとのことです。
以下はデータベースサイズのグラフ。一番上の青い線がInnoDB、二番目の緑の線が圧縮機能を用いたInnoDBで、三番目の黄色い線がMyRocksの圧縮を用いたもの(「MyRocks: A space- and write-optimized MySQL database」から引用)。おおよそInnoDBの圧縮のさらに半分程度になっていることが分かります。
次のグラフは、書き込みされるデータ量の比較です(ログを除く)。MyRocksが圧倒的に小さいことが分かります。
Facebookは現在、ユーザーデータベースティアにおいてInnoDBからMyRocksへの移行を行っているところだそうです。ただし、MyRocksはInnoDBを全面的に置き換えることを意図したものではなく、それぞれ異なるユースケースがあることが強調されています。
It is important to note that we are not planning to migrate all existing InnoDB databases to MyRocks. InnoDB is a long-standing standard MySQL storage engine and has many different use cases.
これは重要なことだが、既存のInnoDBを全部MyRocksにマイグレートする計画はない。InnoDBは長きにわたってMySQLの標準的なストレージエンジンであり、異なるユースケースがあるのだ。
タグ : Facebook , MySQL , リレーショナルデータベース