データストアをM/SからHRDに切り替える時のアプリケーション変更について

67 views
Skip to first unread message

tou555

unread,
May 22, 2015, 11:56:46 PM5/22/15
to google-app-...@googlegroups.com
こんにちは。

M/Sの「強い一貫性」をあてにして作成してしまったアプリケーションをHRDの「結果整合性」に移行する際、どのように変更すればうまくいくか

をご教示いただければと思っております。

5年ほど前にJava(GAE/J)で作ったWebアプリケーションがあり、掲示板や予約システム的なものなど、数十人の仲間内で今でもいくつか使っています。機能追加等はたまにしてきましたが、データストアは初期のM/Sから変更しませんでした。
7月にM/Sデータストアが廃止されるということで、HRDへの移行をしなければならないと思って調べ始めました。

既存のアプリケーションを試しにHRDの環境にデプロイして動かしてみたのですが…データの登録時に「〇〇を登録しました」というメッセージと共にデータ表示をしている部分で、データ表示部分にはその登録したはずのデータが表示されていないということがありました。
データ一覧の取得にはクエリ(JDO)を使っており
M/Sは「強い一貫性」(Strong Consistency)
HRDは「結果整合性」(Eventual Consistency)
の違いから、HRDを使った場合、登録したデータがクエリですぐに取得できない場合があるということが分かりました。

調べた結果、クエリではなくgetを使う、Ajaxのような非同期通信を使う、といった対策が候補になるかと思っていますが、クエリの使用箇所が少なくないので、着手の前に既に移行を済ませた方がどう対処したのかや、どうすれば上手くいくかをご存知の方がいらっしゃいましたら教えていただきたいと思っています。

よろしくお願い致します。

unread,
May 23, 2015, 10:01:45 PM5/23/15
to google-app-...@googlegroups.com
sinmetalです。

私がよくやる手法について

1. 自分が登録したデータはClient側でMergeする

XML Http requestでPostを行い、Responseに登録したデータをもらって、Client側で画面に追加します。
最近はSingle Page ApplicationにしてリッチなClientを作ることが多いので、この形式が多いです。

2. memcacheに最新の登録データを突っ込んでおいて、Queryの結果とマージする

Index遅延が発生するのは長くても数秒なので、最新の1件をmemcacheに入れて、Query結果とマージすれば、だいたい最新です。

3. batchGetだけで完結できるようにスキーマ設計を行う

受注明細のKeyの一覧は、受注伝票が持っててそのKeyの一覧でbatchGetするというパターン

4. 気にしない

エッジキャッシュにデータを突っ込んでいる時は、どっちにしろ遅延するので、そのままにしているパターンもあります。


みたいな感じです。ご参考になれば。

tou555

unread,
May 24, 2015, 11:52:45 PM5/24/15
to google-app-...@googlegroups.com
sinmetalさん、ありがとうございます。どの方法もとっても参考になりました。

「2」のmemcacheを使う方法が自分のアプリケーションの移行では取り組みやすそうだと感じました。最新の情報が必ず取れるわけではなさそうなのが残念ですが、何もしないよりはかなり改善できそうです。

「1」、「3」の手法は新規に作成する際に取り入れていきたいです。
扱う情報の種類によっては「気にしない」のも一つの選択肢ですね。

ありがとうございました。

吉積礼敏

unread,
May 25, 2015, 12:19:50 PM5/25/15
to google-app-engine-japan
さすがです。素晴らしい回答。

2015年5月25日 10:39 tou555 <itengi...@gmail.com>:

--
このメールは Google グループのグループ「Google-App-Engine-Japan」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには google-app-engine...@googlegroups.com にメールを送信してください。
このグループに投稿するには google-app-...@googlegroups.com にメールを送信してください。
http://groups.google.com/group/google-app-engine-japan からこのグループにアクセスしてください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。



--
※※※ Googleトータルソリューション企業 吉積情報 ※※※
※※※     Google クラウドインフラ クラウドエース     ※※※
※※※       日本No1 GoogleAppsコンサルタント      ※※※

吉積情報株式会社
代表取締役 吉積 礼敏 <ayat...@yoshidumi.co.jp>
携帯:090-1732-1848
住所:〒104-0041 東京都中央区新富1丁目12番7号 新富HJビル4階
電話:03-6280-5940
FAX :03-5843-6588
HP  :http://www.yoshidumi.com
Reply all
Reply to author
Forward
0 new messages