ひがやすを技術ブログ

電通国際情報サービスのプログラマ

AppEngineのDatastoreの学び方

Google AppEngineではBigtableの上にDatastore Serviceが構築されていて、開発者は、このDatastore Serviceを利用してBigtableにアクセスすることになります。このDatastore ServiceはPython版もJava版も機能はほとんど同じです。もしかすると、全く同じものかもしれません。


GAE/Jの場合、JDOを通じて、Datastore Serviceを利用するのが推奨されていますが、実はこれが嵌りポイント。
JDOは汎用的なインターフェースなので、Datastore Serviceを理解するのには向いていません。Datastore ServiceがRDBMSのような高機能なら、JDOを通じて抽象化し、Datastore Serviceのことは知らなくても済すのもぜんぜんありなのですが、残念ながら、そうなってはいません。
Datastore Serviceはかなり機能が少なく、かつRDBMSのサブセットでもなく全く異なるものなので、Datastore Service自体を良く理解しておく必要があるのです。


AppEngineできちんと開発できるようになるためには、Datastore Serviceをきちんと理解することが最も重要(他は単に制限がきついだけ)なのですが、これが結構難しい。なぜなら、きちんと解説したドキュメントがなく、APIの仕様のみが(Javaの場合)Javadocとして公開されているだけだからです。
http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/package-summary.html


しかし、ありがたいことに、id:bufferingsさんがSlim3 Datastoreの日本語訳を公開してくれました。
http://d.hatena.ne.jp/bufferings/20091123/1258983438
Slim3 DatastoreはDatastore Serviceへの薄いラッパーなので、このドキュメントを読むとDatastore Serviceの中身が良く理解できるようになります。


Datastore Serviceが理解できるようになったら、APIJavadocを見るとさらに理解が進むはずです。次のクラスを見ておくといいでしょう。
DatastoreService (Google App Engine API for Java)  |  App Engine standard environment for Java  |  Google Cloud
Entity (Google App Engine API for Java)  |  App Engine standard environment for Java  |  Google Cloud
Key (Google App Engine API for Java)  |  App Engine standard environment for Java  |  Google Cloud
Query (Google App Engine API for Java)  |  App Engine standard environment for Java  |  Google Cloud
PreparedQuery (Google App Engine API for Java)  |  App Engine standard environment for Java  |  Google Cloud
Transaction (Google App Engine API for Java)  |  App Engine standard environment for Java  |  Google Cloud


おめでとうございます。ここまでくれば、Datastore Serviceはばっちり理解できています。後は、JDOに戻ってもいいし、Slim3を使ってもいい。それは好みでいいと思います。
何か疑問が出た場合は、 #appengine をタグに入れて、twitterで聞けば誰かが答えてくれるでしょう。