GAEでポケモンのデータベースサイトを作成しました

ここ最近、Google App EngineDjangoを使って、新作ポケモンのデータベースサイトを作っていました。デザインは全然ですが、一応それなりの機能が揃ってきたので、このブログで紹介したいと思います。
Top Page | Datebase & Calculator for Pokémon Black & White

データベース部分は、他の攻略サイトと比べると遥かに貧弱ですが、個体値計算機や努力値カウンター等のアプリケーションにはそれなりの工夫が施されているので、是非使ってみていただきたいと思います。

そもそも、このようなサイトを作った理由は、現在勉強中のDjangoGoogle App Engineを使って何かサイトを作ってみたいという理由ですが、どうせなら作るのならという理由で、Djangoの国際化フレームワークを使って英語版も作成してみました。今後はiPhoneAndroid用のページの作成やHTML5対応にも挑戦したいと思っています。

僕にとってGAEのデータストアの使用は今回初めてだったのですが、今回作ったようなほぼリードオンリーなサイトの場合、GAEのデータストアのメリットが全くなく、むしろデメリットばかりだということを、作った後で気づきました。
まず、RDBなら「HPがいくつ以上で攻撃力がいくつ以上」といったクエリを発行することができますが、GAEのデータストアでは不等式フィルタを使えるのは1つのプロパティまでに限られるので、そのようなクエリをGAEでは発行することが出来ません。
また、他のデータベースと性能を比較した訳ではないのですが、GAEのデータストアは速度が遅いように思います。
JavaScriptを使ったアプリでは、データストア内の全てのポケモンのデータをJSON化して送っているのですが、今のポケモンは600種類以上もいるので、データ数が600件以上となり、データの取得にかなり時間がかかってしまいました(GAEのダッシュボードで、このままだと課金内に収まらないと警告がでる程)。
幸い、appengine_helper_for_djangoを使えば、簡単にGAEのキャッシュ機能を使うことができます。プロジェクトのsettings.pyに、

CACHE_BACKEND = 'memcached://'

と1行追加し、キャッシュしたいview関数にdjango.views.decorators.cache.cache_pageデコレータを適用するだけでOKです。
cache_pageデコレータは?key=valueを含むような動的なURLに対してキャッシュを行わないようので、キャッシュしたいページは全てそのような動的なパラメータを含まない静的なURLにする必要があります。