技術・開発

MariaDBのConnectストレージエンジン

MariaDBの最新バージョン10.0系では、多岐に渡るストレージエンジンをサポートしていますが、その中でもユニークなConnectストレージエンジンを紹介します。

動作概要

アプリケーションは従来のDBと同様にMariaDBにアクセスします。MariaDBはあらかじめ定義された設定に従って、外部のDBまたはファイルにアクセスしてデータ操作を行い、結果をアプリケーションに応答します。

 

 テーブル定義の例

MS-AccessにODBC接続して”Customer”テーブルを作成する場合
create table Customer (
  CustomerIDvarchar(5),
  CompanyNamevarchar(40),
  ContactNamevarchar(30),
  ContactTitlevarchar(30),
  Address varchar(60),
  City varchar(15),
  Region varchar(15),
  PostalCodevarchar(10),
  Country varchar(15),
  Phone varchar(24),
  Fax varchar(24))
engine=connect table_type=ODBC block_size=10 tabname='Customers'
Connection=‘DSN=MS Access Database;DBQ=C:/Program Files/Microsoft Office/Office/1033/FPNWIND.MDB;';

ODBCのカタログ関数を利用して、リモートDBのテーブル定義を参照する場合

create table Customer engine=connect table_type=ODBC  block_size=10 tabname='Customers'
 connection='DSN=MS Access Database;DBQ=C:/Program Files/Microsoft Office/Office/1033/FPNWIND.MDB;';
CSVファイルを参照する場合
create table people (
  name char(12) not null,
  birth date not null date_format='DD/MM/YY',
  children smallint(2) not null)
engine=CONNECT table_type=CSV file_name='people.csv'
header=1 sep_char=';' quoted=1;

例えば上記の場合では、”people.csv”は

Name;birth;children
 “Mike";17/05/01;3
 “John";12/08/03;2

この場合、select * from people; のように、SQL文を使ってCSVファイルを参照することが出来ます。

また、以下のようにinsert文でデータを追加することも可能です。

insert into people (name,birth,children) values('John','31/03/2013',1);

次のように通常のテーブル”address”とのJOIN処理も可能。

select * from people, address where address.name=people.name;

このようにMariaDBの内部に格納されているデータ、ならびに外部のデータも含めて、統合的に利用できるというユニークな機能です。ETLツールなどによるデータの連携処理などを待たずにリアルタイムで参照できるという点も強みと思います。

さらに詳細について知りたい型はMariaDBのKnowledge Baseに詳しいですのでご参照ください。

MariaDBの安定版 Ver. 10.0がリリース

以前にシステム導入の際に、データソースが多岐に渡るケースがあり、どうやってつなげようかと考えていた際に、MySQLのFederated Storage Engineを使おうかと検討していたのですが、開発も事実上止まっていた事もあり、それよりはMariaDBのConnect Storage Engineの方が良いかもと調べていたことがありました。結局は当時、β版だったこともあり採用には至りませんでしたが、先月3/31についにGA版がリリースされています。

 そもそもMariaDBって

MariaDBはMySQLからのforkプロジェクトとしてスタートしたDB。MySQLが米Oracleに買収されたことを契機に、オリジナル開発者のMichael “Monty” Widenius氏らが中心となり、2009年に開発プロジェクトを立ち上げました。現在は非営利団体のThe MariaDB Foundationの下で開発が進んでいます。また、Redhat, Fedora, openSUSE, Slackwareなど多くのLinuxディストリビューションでMariaDBの採用が進んでいます。

2つの系統

MariaDBには5.5系と10系の2つのバージョンが存在します。もともとMySQLと互換を目指して構築されており、MariaDB 5.5はMySQL5.5を元に独自機能の追加や安定性確保のための多くの改善が取り入れられているバージョンです。設定ファイルの書式なども含めて、利用者側からみた機能の違いは軽微で、ほぼ互換性を有しています。さらにMyISAMやInnoDBなどのMySQL標準のストレージエンジンに加え、XtraDB, Ariaなどのストレージエンジンも利用可能になっています。

MySQL 5.6では大規模なリファクタリングが行われました。このためRHELとCentOSのような関係性ではないですが、MySQLをベースにしてMariaDB独自の改良を継続することは難しくなったため、5.5をベースにして、5.6から新機能の選択的な追加、ならびにMariaDB独自の機能追加を行う方針となり、バージョン番号も一気に10.0まで引き上げられました。

MariaDBでは、MySQLと比較して、クエリー・オプティマイザーの性能が向上、サポートするストレージエンジンの追加、Information schemaからユーザーや表、索引の統計情報が参照可能になるなどのメリットがあります。またSQLレベルでは、REGEXPがマルチバイト対応になった違いはありますが、ほぼ互換。通信はMySQL, MariaDBともに同じ通信プロトコルなので、従来のMySQLのドライバーをそのまま利用してMariaDBと接続できます。このため、MySQL→MariaDBへの移行はきわめてスムーズに行えると思います。

MariaDB 10の新機能

MySQLとの互換性が重視されている5.5系と異なり、MariaDB 10では積極的に新機能の導入が進められています。レプリケーション、NoSQL、シェーディングなどの機能が強化されました。レプリケーションでは、スレーブ上にある複数のクエリを並列実行できる並列レプリケーションや、スレーブが複数のマスタを持つことが出来るマルチソースレプリケーションが導入されています。これにより分散したデータに対しての包括的なビューを作ることが出来ます。

ユニークな機能としては、外部にあるデータに動的にアクセスするためのCONNECTストレージエンジンが導入されています。かつてFederatedストレージエンジンと呼ばれていたものの後継にあたるわけですが、ログファイルなどの非構造データやCSVやXMLファイル、ODBCデータベースなどにアクセスでき、MariaDBを通じて間接的に各データソースを参照できます。従来はETL等を導入する必要がありましたが、データが混在する環境でのデータ分析には便利な機能でしょう。

Twilio Smart Communication Award 2014で最優秀賞!

“Twilio”というサービスをご存知でしょうか?APIを通じて電話・SMSをかけたり(送ったり)電話を受けて、それを元に何らかの処理を行うためのサービスです。日本ではKDDI Webコミュニケーションズ社がサービスを提供されています。

“API”というところがミソでして、アプリケーションからメッセージングの手段として、簡単に電話が利用できるわけです。これまで、アプリケーションからの通知の手段としては、主にテキストメッセージとしての電子メールが主流だと思います。たとえば、機械の故障などが起こって通知を行う場合には、あて先に通知メールを送るというのが、よくある実装ですが、その代わりに電話をかけることも出来ます。さらには「サービス業者に連絡する場合、1を押してください」というような案内をして、業者に電話をつなぎ直すといった芸当も可能です。多くの人がスマートフォンを持つようになり、電子メールやLINEといったテキストメッセージによるコミュニケーションが主流のご時勢で、「いまどき電話?」という声も無くもないのですが、即時性・緊急性を要する場合や、機器操作に不慣れなお年寄りなど、まだまだ音声での通話というものにもニーズがあるように見受けられますので、非常にユニークなサービスだと思います。

4/5,6にTwilioを利用したサービスを開発する「ハッカソン」というイベントが行われました。書類審査を通った20チームが時間内にサービスを実装するというコンペでした。”実践クラウド”社のチームの助っ人として参加したところ、まさかの決勝進出。

そして、4/9に“Twilio Japan Summit+Smart Communication Award 2014”が開催されまして、3チームのプレゼンが行われました。プレゼンの途中でWiFiが切れてアプリが動かなくなったり、通知のSMSが想定より大幅に遅れて届くなど、ハプニング続出でしたが、まさかの最優秀賞を頂くという、これまた意外な展開でした。(合わせてSkyland Venture様の企業賞も頂きました。)

Twilio自体は良く出来たAPIだなあと、つくづく思いました。何らかのプログラミング言語の知識は必要ではありますが、当日まで知識が無かったところから始めて、数時間触っている程度のレベルで自動音声応答のサービスや、通知メッセージを電話で伝えるサービスなどは作れてしまいます。以前に同様のサービスの実装をした事がありましたが、電話会社の方からサービス仕様を調整して、多くのパターンの応答音声を予め録音し・・・のような作業が必要で、開発にかなりの時間を要しましたが、同じレベルのものが数時間で出来てしまうことを考えると驚きです。

日本でのサービスでの難点は、応答音声がメカメカしいというか、まだ不自然な感じでした。これは今後の改善に期待するとして、今回はハッカソンでは、このイベントのために提供頂いたエーアイ社の“AITalk”を利用しました。こちらも指定のAPIに読み上げさせたいテキストを送ると、音声ファイルが返ってくるというものです。この音声ファイルをTwilioに送って通話で応答させるという実装にしました。若干ぎこちない所もありますが、機械的な合成音声にしては自然に聞こえる優れものです。(こちらは、決勝デモの際に披露する時間が無かったのが残念です。)

お誘い頂いた実践クラウドの久光社長に改めて御礼を申し上げるとともに、一緒に作業したチームメンバーや、関係者の皆様に改めて感謝したいと思います。
また電話を利用したサービスをご検討されている方につきましては、ご相談頂ければと思います。