MySQL5.6 - さらなる機能追加とNoSQL

2011年11月29日(火)
梶山 隆輔

MySQLでNoSQL!?

MySQL 5.6では完全に新しい試みとしてNoSQLのインターフェースを追加しました。MySQLのデータは通常SQL文を使って読み書きをしますが、このインターフェースではSQL文を使わないデータアクセスが可能となりました。MySQLのNoSQLインターフェースは分散キャッシュのmemcachedを活用しています。

memcachedはブログサイトのLiveJournalで利用が始まったキャッシュの仕組みで、現在では多くのWebサイトでMySQLと組み合わせて利用されています。単純にMySQLとmemcachedを組み合わせた場合では、データの取得時はアプリケーションからmemcachedにアクセスして対象のデータがキャッシュされているかを確認し、データが無い場合はあらためてMySQLにアクセスする必要があります。また、データの更新時には、永続化のためにはMySQLにアクセスし、さらにキャッシュを更新する処理をなんらかの形で実装する必要があります。

MySQL 5.6では、memcachedをMySQLサーバのプラグインとして同一プロセス内部で稼働します。データはInnoDBのテーブルに永続化されて、テーブルの複数の列をまとめてバリューとしてmemcachedプロトコルから扱うこともできます。同じデータに対してキーバリュー型のアクセスが適しているシンプルなデータアクセスをするアプリケーションからはmemcachedのプロトコルで、JOINなど複雑なデータを操作する場合には、MySQLサーバのプロトコルでSQL文を利用します。特にデータをまとめてロードする場合などのオーバーヘッドを最小限に抑えることができます。

図3:MySQLのNoSQL実装

memcachedのプロトコルでデータを追加更新する場合、「memcachedへのキャッシュのみ」、「InnoDBへの永続化のみ」、「キャッシュと永続化」を選択できます。また、MySQLサーバのバイナリログにはデータの変更が記録されるため、レプリケーションも可能です。

フィードバックをお待ちしています。「実験室」版

MySQL 5.6での開発中の機能などよりも、さらに実験的な機能を搭載したバージョンをlabs.mysql.comで公開しています。ある程度基本的なテストはしているものの、製品品質は本番環境での利用をおすすめできるレベルではありませんのでご注意ください。あくまでも最新の実装をいち早くお試しになりたい方のためのリリースです。

例えばInnoDBのページサイズを通常より小さな4KBや8KBにしたものや、レプリケーションの性能向上のためのBinlog Group Commit、バイナリログの内容をC++のアプリケーションから読み書きするためのBinlog APIライブラリなどがあります。サーバのUUIDと一連の番号を使用して、サーバを超えてユニークなトランザクション番号をトランザクションに割り当て、レプリケーションのマスタからスレーブへの切り替え時にログの確認作業を不要にするGlobal Transaction IDも現在はここでの公開です。

新しい技術に興味のある方はぜひお試しいただき、機能や品質についてフィードバックをいただければと思います。

次回は開発中のMySQL Cluster 7.2での改善ポイントついて解説します。

[編集部注] 記事タイトルを内容に合わせて修正致しました。(2011.11.29)

日本オラクル株式会社

2008年にMySQL社に入社し、アジア各国でのMySQLを活用したシステム構築の導入支援を担当。現在はオラクルのMySQLビジネスユニットでのセールスコンサルティングチームのアジア太平洋地域マネージャー。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています