忍者ブログ
雇われるだけの人生から目指せ独立、社会人2年目なゲーム脳SEのブログ。更新頻度=週2~3回。
[220]  [219]  [218]  [217]  [216]  [215]  [214]  [213]  [212]  [211]  [210
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

相変わらずGoogle App Engineのアプリを作成しています。
何とか来月一日までには本番環境にアップしていたいと考えていたのですが、遅々として進みません。正直アプリ作成をなめすぎていたと痛感しております。
今までやってきた仕事は全部「設計書があったり、すでに既存の動いているものがあるところを改修」でした。今はすべて自分がやらなくてはなりません。ゼロからものを作るのがこれほど大変だとは・・・
さらにだんだんと管理対象が増えてきて、脳みその容量が追いつかなくなってきました。どこから手をつければいいのか・・・いままでの自分の仕事が以下に甘かったかと痛感させられます。

世間の厳しさをようやく知ったところに、ひどい追い打ちが。
今日気づいたのですが、Google App Engineはトランザクション処理が弱いんです。

私の中でのトランザクション処理の常識(Java)は、
try{
int num = pstmt.executeUpdate();
pstmt.commit();
} catch(SQLException e) {
pstmt.rollback();
} finally {
pstmt.close();
connection.close();
}
こんなソースだったので、トランザクション処理なんて楽勝だろうと高をくくっていたのですが、
ふたを開けてみると、まぁまぁ出るわ出るわ、致命的な制限の雨・嵐。
  1. トランザクション内部でQueryは実行不可能、Keyを利用したgetのみ可能
  2. put()ならびにdelete()は1モデルインスタンスにつき1回のみ
  3. トランザクション処理中のモデルは、すべて一つのエンティティグループに属していなければならない。
  4. 現状、parentのいない親エンティティとそれを親にする子エンティティを同一のトランザクションで生成できない
事前にきちんとドキュメントを読み込んでいなかった自分が悪いし、何より分散DB環境なんだからこのぐらいの制約は当たり前だろうとも思いますが、しかしこれではトランザクションが使い物になりません。

上記の制約をまともに受けると、こんなソース(Python)になってしまいます。
try:
old_model1 = copy_model(model1)
model1 = edit_model1(model1, hogehoge)
result1 = db.run_in_transaction(update1, model1)
result2 = db.run_in_transaction(update2, model2)
except:
if result1:
#元の状態に戻す、ここで例外起きたら知らん(もう1つtry節が必要)
db.run_in_transaction(update1, old_model1)
これでは一貫性のあるトランザクションとは言えません。
うーん、困りました。こんなところにApp Engineの弱点があるなんて。
とりあえずはトランザクションのことを考えないで先に進めることにします。
難しい問題だからじっくり考える必要がありそうですね・・・


おまけ
ローカルで上記の制約を確かめようとテストしてみたのですが・・・
67bb062e.jpeg

f3bee166.jpeg

9f39c6aa.jpeg

あれ?ちゃんと登録できちゃうんですけど。
本番環境じゃないと再現できないんでしょうか・・・
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
この記事へのトラックバック
この記事にトラックバックする:
カレンダー
10 2024/11 12
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
ブログ内検索
最新コメント
[11/13 DSLR-A850]
[08/29 逆援助交際]
[08/23 クンニ]
[08/22 熟女]
[08/19 痴漢]
はてなブックマーク
プロフィール
HN:
akisute
性別:
男性
職業:
システムエンジニア
趣味:
ゲーム・東方・ニコ動。あと散歩。
バーコード
推奨環境

横幅900px以上、Firefox 3, Safari 3, Opera 9.5, Chrome 0.2以上。IE7ギリギリ対応。IE6未対応。

忍者ブログ [PR]