App Engine SDK 1.3.5

1.3.5が正式にリリースされた。Python版ではプリコンパイルが有効になって、ただでさえ結構速かったスタートアップがさらに速くなったりしているみたいだが、Javaに限って言えば今回の更新はそれほど大きくない。Java版のリリースノートはこちら

タスクキュー

タスクキュー機能は2つの点で強化された。一つは、タスクのスループット。これまではアプリケーション全体で1秒につき50タスクだったが、これが、1つのキューに付き毎秒50タスクに変更された。つまり複数のキューを持てば毎秒50タスクを超えるタスクスループットが得られるということ。

もう一つは、各キューに対してメモリ使用量の上限値を設定できるようになった。これまで100Mで固定だったがこれを増減することができる。

<total-storage-limit> 1G </total-storage-limit>

値は<整数><単位>と書くのだけど、単位のところには、B(bytes)、K(kilobytes)、M(Megabytes)、G(Gigabytes)のほかに、T(Terabytes)まで指定することができる。さすがGoogle様、景気がいい。

BlobstoreInputStream

これまで、ブロブストアからは開始点とオフセットを指定して読み出すインターフェイスしか用意されていなかった。1.3.5ではストリームとしてブロブを読み出すためのクラスBlobstoreInputStreamが追加された。

実はこれは、1.3.5リリース以前からJava docに含まれていたのだが、実際には使えないというよくわからない状態になっていた。また、機能的には従来提供されていたAPIで実装可能で、Gluegentさんのブログ叢雲の歌では、4月9日の時点で独自の実装が紹介されている。さすがだ。

BlobstoreInputStreamの使い方はこんな感じ。

BlobKey key = new BlobKey(req.getParameter("blob-key"));
InputStream is = new BlobstoreInputStream(key);

このほかに開始オフセットを指定するコンストラクタも用意されている。

BlobstoreInputStream(BlobKey blobKey, long offset) 

正直言ってBlobstoreInputStreamというクラスが露出していて、しかも普通にコンストラクタで作れてしまうのは意外だった。他のメソッド、クラスとの整合性で言えば、BlobstoreServiceに

InputStream getInputStream(BlobKey key);

みたいなメソッドをつくり、BlobstoreInputStreamクラスは直接ユーザには見せないようにしそうなものだ。なんかキレイじゃない。

Datastoreのカーソル

これまで開始地点のカーソルのみが設定できたのだけど、終了地点のカーソルも指定できるようになった。が、正直に言って、使いどころがわからない。何に使うんだろう?

この変更にともなって、FetchOptions、FetchOptions.BuilderでCursorを
ハンドルしていたメソッドがすべてdeprecatedになり、’cursor’という文字列のかわりに'startCursor'という文字列を用いるようになっている。同時にendCursorを操作するためのメソッドが追加されている。

所感

今月のアップデートはわりに些細なものばかりといえるだろう。ようやく成熟期に入ったかな?とか言ってると来月あたりドカンときたりするのかも。