2012年11月18日日曜日

[GAE/J] M/SからHRDへ移行時のBlobkey振り替え対応

背景

[Google App Engine(GAE)] のDatastore を [Master/Slave Datastore(M/S)] から [High Replication Datastore(HRD)] への移行しました。
対象としたサービスは大喜利部のサーバサイドプログラムなのですが、Blobを使用しています。

移行した際、Blobkeyは振り直しされるようで、移行後は旧DatastoreのBlobkeyをデータベースに保持するようにしていると、移行後に参照できなくなてしまいます。

[GAE]では[Python]で使用できる、[BlobMigrationRecord]クラスが用意されており、
[.get_new_blob_key(old_key)]というメソッドが用意されているのですが、Javaではこのクラスがなく、以下の方法で回避したので、記録しておきます。
The BlobMigrationRecord Class

解決方法

あまり記載がなく苦労したのですが、どうやら移行した際のBlobKeyの新旧のBlobkeyは「__BlobMigration__」というKindで管理されているようです。

よって、管理ツールの[Datastore Viewer]でSelect分を実行すると新旧の紐付けが分かるということになります。
[ SELECT * FROM __BlobMigration__ ]

つまり、これらを紐づけるようにすれば良い訳です。

[BlobMigrationRecord Class] get_new_blob_key() method for Java

Pythonと同じような[BlobMigrationRecord]の[get_new_blob_key()]メソッドと同じことができるJava版を作ってみましたので掲載しておきます。
自由に使っていただいて問題ないです。
(「いいね」とか「+1」とか「コメント」とかもらえると喜びます)

0 件のコメント:

コメントを投稿