SQLとJSONをNode.js上で組み合わせた新言語「ql.io」をeBayが公開

2011年12月2日

eBayが、JavaScriptアプリケーションからSQL文のような形式でデータベースへの問い合わせを記述できるDSL(ドメイン固有言語)のql.ioを発表。オープンソースとして公開しました

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行の処理を実行したところ、以下のレスポンスタイムがかかるのに対し、

fig

ql.ioで書き直した結果コードが1200行に減り、レスポンスタイムも8秒台から5秒台になったとのことです。

fig

Node.jsの新たな活用形態ではないか

Node.jsはノンブロッキングなイベント処理を得意としていますが、一方でそれだとコールバックが数多くコードの中に現れることになるため、プログラミングは難しいものになるのではないか、という疑問も提示されていました。

ql.ioはNode.jsが得意なノンブロッキングを活かして繰り返し行われるデータベースへのアクセス処理を効率的に行いつつ、それをDSLで隠蔽しようとしています。

これにより、通常のプログラミングの中でノンブロッキング処理を自然な形で組み込むことができるようになります。Node.jsの新たな活用の形態といえるのではないでしょうか。

eBayのブログ「Announcing ql.io」では、JavaとNode.jsの2つの選択肢のどちらを選ぶか迷った結果、Node.jsを選択した理由が説明されています。コンパイル不要のJavaScriptの開発の迅速さや、プロセス当たりのコネクション処理の高さ、非同期I/Oなどが評価されたようです。

Tags: JavaScript プログラミング言語 Node.js

このエントリーをはてなブックマークに追加
ツイート
follow us in feedly





タグクラウド

クラウド / AWS / Azure / Google Cloud
コンテナ / Docker / Kubernetes
クラウドネイティブ / サーバレス
クラウド障害 / 運用・監視

プログラミング言語 / 開発ツール
JavaScript / Java / .NET / WebAssembly
HTML/CSS / Web標準

アジャイル開発 / スクラム / DevOps / CI/CD
ソフトウェアテスト・品質
ローコード/ノーコード開発

データベース / RDB / NoSQL / 機械学習・AI
Oracle Database / MySQL / PostgreSQL
Office / 業務アプリケーション

ネットワーク / HTTP / QUIC / セキュリティ
OS / Windows / Linux / VMware
ハードウェア / サーバ / ストレージ

業界動向 / 働き方 / 給与・年収
編集後記 / 殿堂入り / おもしろ

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本