0年 0月 の投稿一覧

「SQL Server 2014 発売記念フォーラム」に行ってきました。

MapReduceアルゴリズム/Hadoopなどの”NoSQL”の開発が相次ぎ、大量データの処理基盤が実用的なレベルになったころから、「ビッグデータ」ブームが起こりましたが、最後の最後の処理パフォーマンスのネックは、ハードディスクの遅さでした。ハードディスクもデータ容量に関しては飛躍的に伸びてきましたが、スピードに関しては大幅な改善が見られず、SSDやFusionIOのような製品や、IBM Neteezaなどが物理層での改善策として普及してきました。一方データベース側も分析用途としてSAP HANAのようなIn-Memory型のエンジンによって高速化が図られてきました。

そんな中で今回は”SQL Server”がIn-Memory機能をサポートしたということでのイベントでした。

http://www.atmarkit.co.jp/ait/articles/1404/18/news141.html

講演を聴いた感想としては、In-Memory型DBの市場に関しては、これで勝負あった感が出てくるかなという所。昨年秋のOracleオープンワールドで12cでカラム型&インメモリのサポートを発表しましたが、今回のSQL Serverの発表で、普及率1,2位のDBが共にインメモリ&カラム型をサポートするようになったわけです。高速な集計結果が得られるとなれば、運用負荷を考えるとDWH用の別のエンジンを導入するメリットが失われます。

今回、驚いたのはExcelのPowerBI/Power Viewの機能。Power PivotについてはExcel 2010からオプションとして提供されていて、大量データ処理のフロントエンドとしてのポテンシャルを感じさせましたが、今回のデモでは表示に地図上に分布をヒートマップで描くなど、一昔前の高価なGISソフトでしかなしえなかったようなビジュアライゼーションを、数万円の表計算ソフトが実現してしまうということ。今回のSQL Serverの組み合わせで、専用のBIツールを導入しなくとも、簡単な経営ダッシュボードくらいは実現してしまうというわけで、分析基盤の市場破壊もありうるのかなあと感じました。

逆に利用者側としては、分析のためのインフラが非常に安価に整うようになってきたため、むしろデータ収集基盤であったり、分析スキルの方がボトルネックになる可能性の方が高くなるのではと思います。データ分析に関しては自社で詳しい人がいない限り、アウトソースする or 最初から諦めるといったケースが多いように散見されましたが、今回のフォーラムのテーマが「ビッグデータの民主化」であり、ここまで敷居が下がったのであれば、ぜひトライして頂きたいですし、そのためのお手伝いが出来ればいいなと思います。

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等を導入する必要がありましたが、データが混在する環境でのデータ分析には便利な機能でしょう。

サービス企画は引き算で

先日より、あるお客様のサービス開発のお手伝いをさせて頂いております。現状では、ざっくりとした製品のイメージやニーズの把握できているものの、どのように製品化していって、どのように販売していったら良いか?という所がイメージ出来ないというところでアドバイスさせて頂いたり、簡単なプロトタイプを作って意識合わせをしています。

そんな中で感じたのは、「機能を追加する=足し算の方向で話が進みがちだなあ」という事。

具体的なサービスのイメージを作り上げていく中で、どうしても機能を欲張りがちになります。特にソフトウェア/サービス営業を経験された方が加わると、協業製品との機能比較表などで見劣りするとセールスに支障をきたすので、「よそが持っている機能は、うちのにも絶対に必要」という主張は、どうしても声が強くなりがちです。

ただ、実際に導入して利用する段階になると、「いろいろとボタンがあって複雑」「どのメニューを使って良いのか分からない」といった操作感に対する不満が出てくるというのも、良くある話です。(例えばWord/Excel、ハードウェアで言えばスマートフォンなどが持っている機能のうち、どれだけ使いこなしているでしょうか?)

特に開発企画の初期の段階では、サービスのコンセプトを固めることが重要で、

・どんな人(スキルレベル、利用シーン、利用状況など)の

・どのような課題を解決する

のかを決めておかないと、仕様策定の際に採否の基準がブレまくります。

そしてコンセプトを考慮した上で、重要度が落ちるものに関しては、極力落とす=引き算する事が重要です。「あれば良いな」というレベルの機能は最初の段階では取り除き、必須の機能だけを取り入れるくらいで考えた方がいいです。操作画面は可能な限りシンプルにする必要があります。例えばソフトウェアやWebのサービスであれば「ボタン1個(これは極端にしても、5個以内とか)で済ますにはどうしたらいいだろう。」と、思いをめぐらせてみるのも良いと思います。

逆に、実際に「引き算」をするにあたっては、ターゲットを明確に絞りこみ、それ以外の売上げの可能性を捨てるという事になります。それゆえに批判が多くなりがちで、それに打ち勝つ必要が出てきます。特に大きい会社では販売部門の批判に打ち勝ち、企画の稟議を通すこと自体が困難を極めることになるでしょう。逆に競合と比較して足りない機能、あればいいなという機能の追加=足し算の発想は、分かりやすい故に批判は少ないのが常で、この方向で企画が進められることは多いです。ただし、それにより製品の複雑化やコストアップという弊害をもたらします。引き算の発想=切り捨てることにより、特定のターゲットにとっては魅力的なサービスに仕上がり、評判を上げることになるのです。この足し算/引き算のバランスが企画マンの腕の見せ所なのですが、特に引き算は難しく、時と場合によっては勇気が必要になってくるので、常に意識して行う必要があります。

つまりは商品・サービス企画の前提として、しっかりとしたコンセプトを打ち立てるだけのマーケティングがしっかりとしている必要があるわけです。それを含めても引き算の商品・サービス企画というのは難しいものですが、成功した際には使い勝手の良い優れたものが生み出されるのです。

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に送って通話で応答させるという実装にしました。若干ぎこちない所もありますが、機械的な合成音声にしては自然に聞こえる優れものです。(こちらは、決勝デモの際に披露する時間が無かったのが残念です。)

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

データマイニングツール”Orange”

日本ではデータマイニング用のツールといえば、商用ではSAS、IBM ModelerやExcelなど。オープンソース系ではRが主流ですが、ちょっと変わったツールのご紹介です。

Orange – Data Mining Fruitful & Fun
Orange (http://orange.biolab.si)は汎用の機械学習やデータマイニング用のツールで、スロベニアのLjubljana大学のコンピューター情報サイエンス学部の Janez DemšarさんとBlaž Zupanさんらによって開発が始まり、現在ではオープンソースとしてコミュニティベースで開発が続けられています。
Orangeはあまり経験のないデータマイニングの初心者から、スクリプトを書いてデータ処理のアルゴリズムを実装するプログラマーまで、多様なインターフェースを持つユニークなツールとなっています。また、多岐にわたるプラットフォームをサポートしており、Windows, Mac OS X, Linuxで動かすことが出来ます。
周りを見ていると、この手の作業を行う人はRのユーザーが多く、Rでの文法を覚えて処理コードを書いている人が多いような印象を持っています。またはオンライン広告関係の方がNeteezaのような強力なデータ分析用のエンジンとともに、フロントをIBM Modelerを使っているようなお金持ちな構成(うらやましい!)で作業をされている場合もあるようです。
Orangeは機能面で言えば、ちょうどその隙間を埋めるといいますか、データマイニングの初心者でも、気軽にいろいろなアルゴリズムを使ってデータ処理をしてみるツールとしては良いツールだと思います。(いかんせん、現時点では日本語版が無いというのがハードルが高いのですが、この手の業務をするレベルの人は比較的、簡単な英語は読みこなせるのではと期待。)
Orangeのツールとしての特徴を挙げていきます。
 

ビジュアルなプログラミング環境

ウィジェットを組み合わせることで、データソースの指定から、処理するロジックの指定、出力の指定などのスキームを作ることが出来ます。この辺りのUIはIBM Modeler(旧SPSS Clementine)に似ています。

多様な可視化の機能

データ分析の作業にあたっては、結果を表現するためのビジュアライゼーションの機能が重要になってきます。Orangeでは普通の棒、折れ線グラフなどの他に、ツリー図、産婦図、ネットワーク図からヒートマップまで、多様な出力様式に対応できます。

ウィジェット

ビジュアルプログラミングを行う際に利用できるウィジェットは100を超え、さらに開発が続けられています。これらは標準的なデータ分析のタスクの他に、集計処理や機械学習のアルゴリズムの実装であったり、さらにはバイオインフォマティックス向けのBioorangeのような専用のアドオンも開発されています。

スクリプト用のインターフェース

Orangeの拡張は基本的にPythonで行いますs。Pythonのスクリプト用のインターフェースが用意されており、新しいアルゴリズムの実装や、データ処理フローの制御などを行う事が出来ます。また、Orangeのコンポーネントの再利用が可能であり、Pythonで実装されるデータ処理スクリプトにOrangeのライブラリを利用する事も出来ます。

ダウンロード

今の所、日本語版は用意されておりませんので、主に英語版での利用となるかと思います。
http://orange.biolab.si/download/
Windows版:
基本的にはPythonの実行環境も同梱されている”Full package”を選択します。
インストール用のexeファイルをダウンロードして実行し、指示に従ってください。
すでにインストール済みでバージョンアップを行う際には、”Pure Orange”版を選択し、既存の環境を上書きます。
Mac OS X版:
“Bundle”版でdmgファイルをダウンロードするか、Pypiパッケージを利用してインストールします。
パワーユーザーは、安定版または開発版のソースコードをダウンロードして、独自にビルドすることも可能です。

起動!

アイコンをダブルクリックして起動します。
 Orange Icon
ワークフローを記述するキャンバス画面が表示されます。初回起動の場合にはチュートリアル(Tutorial)を起動して、操作方法をチェックしてください。
日本語での資料が少ないので、徐々に翻訳を行ってみております。何かの機会にでも公開したいと思います。