2012年2月15日,Oracle は MySQL Cluster 7.2 を新たにリリースすると発表した。SQL と NoSQL によるデータアクセスをサポートする。NoSQL アクセスは C++ API memchached ワイヤプロトコルおよび REST API を通じてサポートされ,SQL インターフェースには通常の MySQL アクセスポイント (JDBC など) 経由でアクセスする。さらに Oracle によれば,複雑なクエリの実行速度が最大で 70 倍以上も向上しているという。MySQL Cluster 7.2 はオープンソース製品である。今回のリリースに加えて Oracle は,MySQL Cluster のデプロイ管理を簡単に実行できる有償製品である MySQL Manager のバージョン 1.1.4 もリリースした。
今回の MySQL Cluster リリースではスケーラビリティと信頼性が向上して,データセンタ間のレプリケーションが可能となった。さらにデータの自動シャーディングとレプリケーションの競合解決についても改良されている。ユーザ権限の複製やクラスタの維持管理の容易化に関する問題にも対処している。それと同時に,より柔軟なスケーラビリティというメリットをクラスタ導入に活用するため,クラスタノードを Oracle VM インフラストラクチャで認証および統合するための開発作業も実施された。MySQL Cluster 7.2 は現在,Oracle Linux と Oracle Solaris で動作を確認している。
"MySQL Cluster 7.2 は,最先端の Web データベースという MySQL のポジションをさらに強化しようとする Oracle の投資姿勢を示すものです。" Oracle の MySQL 開発部門担当副社長 Tomas Ulin 氏は,プレスリリースでこのように述べている。"パフォーマンスと柔軟性の向上した MySQL Cluster 7.2 は,ミッションクリティカルな Web ワークロードのための強固な基盤をユーザに提供します。SQL 技術と NoSQL 技術の最高のブレンドがリスクとコスト,そして複雑性を軽減するのです。"
InfoQ は今週始めに Tomas Ulin 氏に会い,今回のリリースについて話をした。
氏は MySQL と,そこに新たに加わった NoSQL レイヤに関して説明してくれた。クラスタはハッシュされ,テーブルはノード全体で自動的にシャーディング (主キーによるハッシュ) される。99.999 % の可用性を誇る MySQL クラスタは分散非共有を方針としていて,自己修復が容易なように,データは各ノードに複製される。これによってオンライン状態でのクラスタのアップグレードも実現されている。レプリケーションにより,マシンをローテーションから外してソフトウェアあるいはハードウェアのアップデートを行うことが可能なのだ。従ってアップグレードとメンテナンスの時間も 99.999 % の可用性に含まれる。
MySQL クラスタソフトウェアは,MySQL AB があるテレコム会社 (Alzato,Ericsson が立ち上げた小規模なベンチャ企業) から買収したものだ。そのテレコム企業では少しの間専用のデバイス,インメモリで使用されていた。氏によれば,世界中で約10億人の人々が毎日,MySQL Cluster によって携帯電話の通話に接続されている ("携帯電話を所持しているなら,すなわち MySQL クラスタを使用しているということです")。
氏はさらに,今回の MySQL クラスタのリリースが Oracle による一連の MySQL リリースの一環であること,これまで Sun や MySQL AB にはなかった MySQL の "猛烈な勢い" の技術開発やリリース進行において,Oracle が主導的な立場にいること,などを説明した。Oracle の MySQL に関するコミットメントは MySQL クラスタの 2010 5.5 リリース,2011 5.6 リリース,2011 リリース,さらに今回のリリースにおいて実証されている。Oracle は Windows インストーラや Oracle Fusion サポートなどを含んだ,MySQL のスタック全体へのリソース提供を約束している。
氏は自動シャーディング,オンラインのスケーリング (ノードを追加/バースト回避のため徐々にデータを再配布/完了後に旧データを除去),SQL レイヤおよびデータレイヤ (NoSQL レイヤ) のスケール機能など,MySQL クラスタの主なメリットについても説明してくれた。
Oracle は MySQL Standard Edition,MySQL Enterprise Edition (パーティショニング,バックアップ,スケーラビリティなど),最上位である MySQL Cluster Carrier Grade (MySQL クラスタリングを含む) という,レベルの異なるサポートとライセンスを提供している。さらに MySQL Clustering 7.2 は GPL ライセンスでの取得も可能だ。
複雑なクエリ速度の 70 倍以上という (”愕然とするような”) 改善に関して氏は,それが "プッシュダウン結合" あるいは "分散結合" と呼ばれるものによって達成されたと語っている。これは強くシェーディングされたリレーショナルデータベース上で分散ジョインを実行するという点で,MapReduce 特有のユースケースに非常によく似ているように思われる。結合は実際のデータノードに対して行われる。すべてのノードに対する結合が並列的に実行され,その後ひとつのノードがそれらを組み合わせる。並列実行の効果はその速度に顕著に表れる。氏の言うところでは,8ノードクラスタで毎分10億のクエリを処理可能であり,ノード追加に対して線形に近いスケーラビリティが得られている。
スキーマもタイプもない blob データを持つキーバリューストアに Memchached ワイヤプロトコル経由でアクセスするためには,リレーショナル SQL データベースを一体どうやってマップすればよいのだろう。筆者と同じように,悩んでいる読者も多いのではないだろうか。100% の透過性はなく,多少の開発作業が必要となる。場合によっては,データベースの行/列を Memcached アクセスにマップするために MySQL Memcached ドライバが使用するメタデータを,テーブルに挿入しておく必要がある。Oracle が次のリンク先で,Memcached から MySQL クラスタ へのマッピングについて説明している。