SQLとJSONをNode.js上で組み合わせた新言語「ql.io」をeBayが公開
eBayが、JavaScriptアプリケーションからSQL文のような形式でデータベースへの問い合わせを記述できるDSL(ドメイン固有言語)のql.ioを発表。オープンソースとして公開しました。
現在、多くのWebアプリケーションが、バックエンドとのデータのやりとりにHTTPをベースにしたAPIを用いています。しかし、WebベースのAPIによってデータを取り出すのは、プログラマにとって実は手間のかかることです。
例えば、キーワードを入力すると関連する商品の名前、詳細、購入者の評価をユーザーに表示する、というWebアプリケーションでは、まずキーワードでデータベースを検索して商品IDを取得し、今度はその商品IDをキーにして名前や概要、評価の情報を取得する、といったように、APIを繰り返し呼び出す必要があります。
ql.ioはこうした内容をSQLのように分かりやすい記述で実現するだけでなく、複数の問い合わせをまとめて実行することで、APIを繰り返し呼び出す回数を減らし実行速度も向上させることができます。
ql.ioはNode.js上に実装されています。プログラマはNode.jsに対してql.ioのDSLで記述したクエリを投げると、Node.jsがDSLを解釈してデータベースへアクセス、結果をJSON形式でアプリケーションに戻してくれます。
SQLのように処理を記述するql.io
ql.ioのページのサンプルを見てみましょう。キーワードで製品IDを取得し、その製品IDをキーにして詳細とレビューをeBayのデータベースから取得する、というコードになっています。最後の行にこのメソッドを/myapiで呼び出せることが定義されているようです。
prodid = select ProductID[0].Value from eBay.FindProducts where
QueryKeywords = 'macbook pro';
details = select * from eBay.ProductDetails where
ProductID in ('{prodid}') and ProductType = 'Reference';
reviews = select * from eBay.ProductReviews where
ProductID in ('{prodid}') and ProductType = 'Reference';
return select d.ProductID[0].Value as id, d.Title as title,
d.ReviewCount as reviewCount, r.ReviewDetails.AverageRating as rating
from details as d, reviews as r
where d.ProductID[0].Value = r.ProductID.Value
via route '/myapi' using method get;
これをNode.jsのサーバに対して以下のように呼び出すと、結果がJSONで返ってくると。
http://<host>:<port>/myapi
eBayのベンチマークによると、あるチームが従来のAPIで記述した約2800行の処理を実行したところ、以下のレスポンスタイムがかかるのに対し、
ql.ioで書き直した結果コードが1200行に減り、レスポンスタイムも8秒台から5秒台になったとのことです。
Node.jsの新たな活用形態ではないか
Node.jsはノンブロッキングなイベント処理を得意としていますが、一方でそれだとコールバックが数多くコードの中に現れることになるため、プログラミングは難しいものになるのではないか、という疑問も提示されていました。
ql.ioはNode.jsが得意なノンブロッキングを活かして繰り返し行われるデータベースへのアクセス処理を効率的に行いつつ、それをDSLで隠蔽しようとしています。
これにより、通常のプログラミングの中でノンブロッキング処理を自然な形で組み込むことができるようになります。Node.jsの新たな活用の形態といえるのではないでしょうか。
eBayのブログ「Announcing ql.io」では、JavaとNode.jsの2つの選択肢のどちらを選ぶか迷った結果、Node.jsを選択した理由が説明されています。コンパイル不要のJavaScriptの開発の迅速さや、プロセス当たりのコネクション処理の高さ、非同期I/Oなどが評価されたようです。
あわせて読みたい
2011年11月の人気記事「さくらのクラウド料金発表」「jQuery Mobile 1.0正式版が公開!」「まさに怪物! Fusion-io」
≪前の記事
連載マンガ:Mr. Admin「休み明けにいつも起こること」