小野和俊に聞く、DataSpider Servista 3.1新機能「スマートコンパイラ」とは

Avatar
dstn


いよいよリリースが迫ってきたDataSpider Servista 3.1。今回のバージョンアップにより、さまざまな新機能が追加されているが、その中でも目玉の機能となるのが「スマートコンパイラ」機能だ。大容量データ処理において大きく効果を発揮するというこの機能、その内容は一体どのようなものなのであろうか? この機能の開発に企画段階から実装まで深く関わったアプレッソ代表取締役社長、小野和俊に機能の詳細や開発において苦労した点などについて聞いた。

 

PSP2▲「スマートコンパイラ」機能によりデータフローが自動的にPSP化されたスクリプト(PSPデータフロー表示状態)

機能完成後に実際にスクリプトを動かしてみて
スマートコンパイラの大きな効果を実感した


 

DSC_0070
▲アプレッソ代表取締役社長 小野和俊

- 新機能「スマートコンパイラ」とは何ですか?

簡単に言うと、DataSpiderが従来から持っているPSP(パラレル・ストリーミング・プロセッシング)という機構のメリットを、特に意識することなく普通にスクリプトを作っても、最大限享受できるようにした機能です。

- PSPのメリットとはどのようなものでしょうか?

PSPは、パイプライン的に中間データを渡しながら並列処理で読み取り・変換・書き込みの処理を行う機構です。読み取り処理がある程度終わったら、読み取り処理を継続しながら次の変換処理にデータを渡し、変換処理でも同様にある程度処理が終わったら処理を継続しながら、次の書き込み処理にデータを渡して書き込みを行う、というように前の処理の終了を待つことなく、バケツリレー的にデータを渡して処理をします。この処理はバケツリレーの「バケツ」以上のデータをメモリに持つことがないので、どんなに大容量のデータを扱ってもメモリーがそれに対応して増えていくことが無いというメリットがあります。これにより、大容量のデータでもシステムに負荷をかけたり、メモリーが不足して発生するエラーOutOfMemoryErrorになることはありません。

- DataSpiderには大容量のデータを扱うための「大容量データ処理」という機構もありますが、これとは異なる機構ですか?

異なります。大容量データ処理では、データをファイルに出力して扱うことでメモリ使用量を抑える機構です。これのデメリットとしては、ファイルへの入出力が発生するため、メモリを使用する場合に比べてパフォーマンスが劣化してしまうことなんですよね。PSPではメモリ中にデータを保持するためこのデメリットは無く高速で処理が可能で、かつメモリ使用量が増大することなく大容量データの処理ができます。

- では従来機構としてあったのに、今回スマートコンパイラという新機能をリリースした理由は?

従来はPSPを使うためには、「PSPスクリプト」という通常のスクリプトは別の種類のスクリプトとして作る必要がありました。このため、使い勝手の点で決して良いとは言えなかったところがあります。また、マニュアルの説明でも少し良くないところがあって、PSPが適している処理・適していない処理があり、適していない場合はデメリットがある、というように読める書き方になっていた。これは実際とは異なり、PSPのメリットが大きく出るか、それほど大きくないかの違いであって、基本的どのような処理でもメリットはあるんですね。ただそれがうまく伝わっておらず、デメリットがあるならばということで使われないことが多かった。それで、特に意識せずとも、普通にスクリプトを作ればPSP処理を使うことができるようにしたかった、ということで今回の「スマートコンパイラ」という機能を開発しました。

- なるほど。具体的にスマートコンパイラは、どのようなことを行う機能なのですか?

スクリプトを作ると、その中でPSPとして処理できる部分のデータフローをスマートコンパイラが自動的に「PSP化」をしてくれるんです。従来だとPSPスクリプトとして別のスクリプトを組み立てる必要があったのが、スマートコンパイラによって何も意識することなくPSP処理を使うことができる。例えば初めてDataSpiderを作る人でも、通常通りスクリプトを作れば大容量のデータでも高速・低メモリ負荷の処理を行うスクリプトを作ることができるんです。

- 今回スマートコンパイラを作ってみて、効果は実感しましたか?

しましたね。普通にスクリプトを作って動かすと、何百・何千万件というデータであってもメモリが増えていかずに速度も速い処理ができる。もちろんそれは狙い通りの動きなんですけど、いざスクリプトを目の前で動かすと「あーやっぱりスマートコンパイラいいよなー」とその大きな効果をひしひしと感じました。

psp_1▲パラレルストリーミング処理(PSP)イメージ図。読み取り・変換・書き込みの各処理が別スレッドで処理され、高速・低メモリ負荷の処理が可能だ

開発にあたり最初に検証したのは「感動体験のレベル」
そのレベルはかなり高いことが確認できた


 

- 今回のスマートコンパイラ開発プロジェクトはどのように進めていったのでしょうか?

自分はまず3.1のリリースまでのマイルストーンを作成しました。まず最初のマイルストーンとしたのは、「スマートコンパイラが完成すると、どのようなレベルの感動体験が得られるか?」ということの検証でした。どういう場合でもそうだと思うんですが、大きめの機能を作る時はそれが成し遂げられたときの感動がどのくらいのものか、というのを実際に体験してそれを確認してから進めるべきだと思っていて。今回は、フィージビリティスタディ用のコードをまず先に書いて、これを汎用的な機能として、完成した暁にはどのくらいのパフォーマンスやメモリへの低負荷を実現できるか、ということを検証しました。その結果、これは感動体験のレベルはかなり高い、ということが実感できたので、製品版に向けての開発に進みました。

- 開発はどのようなメンバー構成で行ったのでしょうか?

自分が開発プロセスの管理やマイルストーンの設定を行うプロジェクト・マネジメントのところで入って、あとクライアント・サイドでのPSPの適用やモデルのコンパイルなどの実装を担当しました。それとサーバー部分の担当が1人、そしてクライアントのGUI部分の担当が1人、という3人で行っていきました。

- 開発にあたって苦労した部分は?

トランザクションとの絡みの部分は難しかったですね。DataSpiderはかなりトランザクションの仕組みが充実していて、J2EEの一部であるJTA(Java Transaction API)の仕様に沿って作られています。これは単にトランザクションの開始・終了やロールバックだけの簡単な仕様ではなくて、トランザクションをネストさせて親・子・孫なども含めて動きが規定されたものです。これを意識してきちんと管理しないと、読み取りが終わっていないのにトランザクションが終了して読み取りの入力が閉じてしまうなど、不整合が発生してしまう。まあ、予め想定はしていたことではあったんですが、かなり実装には苦労しました。
あとクライアントのGUI部分についてもいろいろと悩みました。PSP処理になったときのエフェクトがあるんですが、これが派手過ぎて新宿歌舞伎町みたい、とかピカチューみたいだ、とか意見があったりして(笑) クライアント周りについては、何度かレビューしてもらいながらブラッシュアップしていきましたね。

- レビューはどのように行っていったんですか?

社内のエンジニア・SEを中心に、アイディアが伝わるレベルの簡単な図やプロタイプを見せて、反応をもらいました。気づいていない観点があったり、仕様上の問題に指摘をもらったりして、再び持ち帰って修正しながら4回ほど行いましたね。また、パートナー様へも見せて意見をいただいたりもしました。特に見せ方の部分で、「どのような情報をどのレベルまで出すべきなのか」というところは、レビューを繰り返してコメントをもらうことによって改善でき、良い形にまとまったと思います。

DSC_0095

大容量のデータ処理に対する機能リクエストに対して
かなり正解に近い回答ができた、と自信を持っている


 

- 開発を終え、今はリリース前のテストフェーズに移っていますが、リリース後はどういう方に使ってもらいたいですか?

使ってもらいたいというとまず思い浮かぶのは、DataSpiderを初めて使う人ですね。今までだと、初めて使う人がスクリプト作ると、当然PSPスクリプトの使い方が分からないので通常のスクリプトを作ることになる。そうすると、大きなデータを処理するとメモリをどんどん使ってしまい、すぐにOutOfMemoryErrorになってしまったりして印象が悪くなったりしたことがあると思うんです。もちろんマニュアルをきちんと読めばそうではない方法が書かれているますが、やはり最初は分からない。スマートコンパイラ機能が実装された3.1からは、そのような人でも最初から大容量のデータをメモリを使わずに高速で処理するスクリプトを作ることができるようになったんです。

- これまでDataSpiderを使ってきた方についてはいかがでしょうか。

もちろん使っていただきたいですね。特にエンドユーザー様、パートナーさんでDataSpiderで大容量データ処理に問題を感じていたような方にはぜひ使っていただき、使いやすさを実感していただきたいと思っています、
もともと、パートナーさんから大容量のデータ処理に対応してほしいということは強いリクエストをいただいていたんですよね。それがあれば、もっと大規模のシステムにDataSpiderを使うことを提案できるということで。これまでは「それはPSPスクリプトで対応できますよ」ということでお答えしていたんですが、スクリプトが別になったりと、やはり使いにくい部分があった。今回のスマートコンパイラで、自然にスクリプトを作ればそのような大容量データを高速に処理できるスクリプトが出来上がるようになる。これはリクエストに対する答えとしては、かなり正解に近いものができたのではないか、と自信を持っています。

- これまでDataSpiderで開発したスクリプトも、バージョンアップすればスマートコンパイラの恩恵を受けれるのでしょうか?

そうですね。ただ1つ注意点としては、3.1にバージョンアップして過去に作ったプロジェクトを読み込むと、スマートコンパイラはオフになった状態で読み込まれます。これは互換性への考慮から、あえてそのような仕様にしています。これらのプロジェクトにスマートコンパイラ機能を適用したい場合には、マイプロジェクトやデザイナで選択して一括でオンにすることで簡単に適用できます。プロジェクト単位でもスクリプト単位でもできるので、ぜひ試していただきたいです。

- では従来からPSPスクリプトを使っていた方に対してメリットはありますか?

これまでPSPを使う場合は、スクリプトを作る際に最初にPSPスクリプトかどうかを選択する必要があったんですが、なかなか最初に大容量データを処理するかどうかは判断できないですよね。途中でそのことが分かった場合、PSPスクリプトに処理を移動する必要があったりという手間がかかったんですが、その手間がなくPSPを使用できるのはかなり開発が楽になると思います。
それと、PSPスクリプトの処理と通常のスクリプトで処理が分かれてしまうので、一覧性に欠けるという問題がありました。スマートコンパイラにより、どのようなデータを扱うかというシステム的な要件を意識することなく、すべての処理を一枚絵として表現できる。それは大きなメリットだと思います。


このように、大容量データ処理を高速・低メモリ負荷で処理できるというパラレルストリーミング処理のメリットを、通常通りスクリプトを作るだけで享受できる「スマートコンパイラ」機能。
ぜひ、これを読んでいただいている皆さんも使用してみて、その「感動レベル」を体験していただきたい。
スマートコンパイラ機能以外にもさまざまな新機能を搭載したDataSpider 3.1の詳細については、別途記事にて紹介する予定だ。
お楽しみに!

コメント

ログインしてコメントを残してください。

Powered by Zendesk