2010年03月12日

Google App Engine特有の仕様

GAE上で実行されるプログラムは、基本的に普通のCGIと同じインターフェースとなっています。Pythonのモジュールもセキュリティ的に問題のないものはほとんど使えるので、PythonでCGIを作ったことがあれば、簡単に始めることができます。

しかし、GAE特有のものもあるので、ここで紹介しておきます。

Datastore

GAE上のアプリケーションがデータを保存する際には、通常のファイルは使えず、Datastoreと呼ばれるデータベースを使う必要があります。

データベースといえば、OracleやSQL ServerのようなRDBMSが有名ですが、DatastoreはRDBMSではありません。RDBMSよりもスケーラビリティを重視したデータベースです。

RDBMSでないデータベースを総称して「NoSQL」と呼ばれています。RDBMSよりも負荷に強く、可用性の高いシステムが作れるということで、最近の流行です。他にはAmazonが提供するSimpleDBなどが有名です。

RDBMSに慣れた人にとって、Datastoreは機能が制限されすぎていて使いにくいものかもしれません。例えばGQL(DatastoreのSQLモドキ言語)では、WHERE句に不等号を使った条件を複数指定する際は、1つのプロパティに対してしか使えません。「明日以降に発売される400円以上の雑誌」という条件を指定しようとすると、発売日と金額で不等号が必要になるので駄目です。「400円以上500円未満」のように同じプロパティに対する不等号ならば複数指定することもできます。

しかし、Pythonでdb.Modelクラスを継承してメンバを定義するだけでテーブルが定義できる等、とても手軽な面もあるので、データベースに馴染みのない人にとっては使いやすいと思います。

cron

GAEで使えるcronは、指定された時間に指定されたURLをHTTPのGETメソッドで開くという動作になります。そのため、実行するスクリプトはURLにマッピングされている必要があります。

動作テストの際には、cronジョブに割り当てられたURLをブラウザで開くだけでテストすることができます。

ちなみに、30秒制限はcronにも適用されます。

Task Queue

Task Queueを一言で説明すると、プログラム上から任意に登録できる1回限りのcronジョブです。まだ実験的な機能で日本語ドキュメントにも記述がありませんが、非常に便利な機能です。

もっとも一般的な使い方は、不定期に実行される処理です。例えばF1ニュース配信botでは、決勝レース開始15分前にアナウンスを流しますが、レース開始時刻はグランプリによってまちまちで、だいたい2週間に1回程度しか出番がありません。ここでTask Queueが活躍し、1日1回実行されるcronジョブでその日にレースがある場合にアナウンス用のTaskを登録しています。これをcronだけで処理しようとすると15分間隔で常に監視する必要があるので、ほとんどの処理時間が無駄になってしまいます。

また、変わった応用例として、30秒で終わらない処理を複数のTaskに分け、Task Queueを使って一気に処理させるという使い方もあります。

2010年03月12日 【プログラミング】 | コメント(0) |

この記事へのトラックバック
この記事へのコメント

コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。