スマートスタイル TECH BLOG

PHPでMySQLの新しいAPI「X DevAPI」を使ってみた

MySQLで NoSQL

MySQL 5.7.12 から、MySQLでもNoSQLのように JSON形式による Document Store が扱えるようになりました。
今回は PHP の mysql_xdevapi の バージョン 8.0.2 (alpha) がリリースされたのでどういった機能があるか検証を行いました。

X DevAPI とは?

X DevAPI は MySQL の新しいプロトコル「X Protocol」を通じて MySQL を操作するライブラリです。
従来のSQLによる操作に加えて、CRUD 操作によるモダンな方法でプログラムフレンドリーな操作を提供しています。

参考

X Plugin セットアップ

X DevAPI を使う場合、MySQLサーバ側で X Plugin を有効にする必要があります。

参考

PHP と mysql-xdevapi のインストール

CentOS 7 の REMI レポジトリを有効にすると、mysql-xdevapi パッケージをインストールすることが出来ます。

EPELとREMIパッケージをインストール

PHP 7.1 と mysql-xdevapi をインストール

参考

従来のテーブル構造に対しての操作を行う

X DevAPI は Document Store のためだけの API ではなく、従来どおりのテーブルに対しても操作することができます。

例えば以下のような users テーブルがあった場合

PHPのコードでは以下のようにして操作できます。

MySQL側では以下のSQLに変換されて実行されています。

PHPのWebフレームワークではデータベース操作をO/Rマッパーで行うことが多いと思いますが、XDevAPIを使えばMySQLのネイティブドライバで同様の仕組みが実現できています。

データの挿入や更新、削除もできます。

MySQL側では以下のSQLに変換されて実行されています。

Document Store として使う

X DevAPI を使えば、NoSQLのように Document Store が使えるようになりますが、内部的には特別な領域にデータが保存されるわけでは無く、従来のテーブル構造に変換されて保存されます。

PHPから Schema を作成する

PHPコード

一般クエリーログでは以下のSQLに変換されて実行されています。

確認すると、たしかに新しいデータベースが作成されています。

このことからMySQLでは「Schema = データベース」にマッピングされて保存されていることがわかります。

PHP から Collection を作成する

PHPコード

MySQL では以下のSQLに変換されて実行されていました。

新しく _id と doc を持っているテーブルが作成されています。

このことからMySQLでは「Collection = テーブル」にマッピングされて保存されているのがわかります。

コレクションへの追加

PHPのコード

MySQL では以下のSQLに変換されて実行されていました。

_id は ライブラリ内で UUID が生成されて割り当てられているようです。

データの set, unset

set で項目を追加

実行されるSQL

unset で項目を削除

実行されるSQL

ALTER でカラムの追加や削除無しに項目変更ができるのは Document Store の強みの一つです。

トランザクションのサポート

NoSQL の多くはトランザクションをサポートしていませんが、MySQLでは Document Store でもトランザクションをサポートしています。

PHP のコード例

まとめ

  • PHP の mysql_xdevapi パッケージはまだ alpha バージョンのため不安定です(検証中に segfault が発生することも)
  • 従来のテーブル構造にも O/R Mapper を使わずに PHP のコードでデータにアクセスすることができます。
  • Document Store も使えるが、内部的にはデータベースやテーブルにマッピングされて保存されています。

安定して使えるようになるにはまだ先のようですが、以下の用途で使う場合は検討を始めてもいいかもしれません。

  • 一部のデータだけNoSQLのような使い方が必要な場合
  • トランザクション処理を通常のテーブルも含めて行いたい場合
  • 軽量なO/R Mapper が欲しい場合
Return Top