- 現在との差分 を表示
- ソース を表示
- Google App Engine for Python その2 へ行く。
6: 2015-07-15 (水) 18:46:46 njf | 7: 2015-07-20 (月) 17:01:01 njf | ||
---|---|---|---|
Line 175: | Line 175: | ||
実際には登録日や更新日時、ゲームのバージョンなど、管理用のデータを加えることになると思いますが、最低限必要なのはこれだけです。 | 実際には登録日や更新日時、ゲームのバージョンなど、管理用のデータを加えることになると思いますが、最低限必要なのはこれだけです。 | ||
+ | |||
+ | *IDの加算と排他処理 [#g6b90e90] | ||
+ | |||
+ | ユーザーIDを取得して加算する処理は以下のようになります。 | ||
+ | |||
+ | @ndb.transactional | ||
+ | def getUserId(): | ||
+ | userIdIndex = "userIdIndex" | ||
+ | lastId = UserIdCounter.get_by_id(userIdIndex) | ||
+ | if lastId is None: | ||
+ | lastId = UserIdCounter(id=userIdIndex) | ||
+ | lastId.userId = 0 | ||
+ | |||
+ | nowId = lastId.userId | ||
+ | |||
+ | lastId.userId = lastId.userId + 1 | ||
+ | lastId.put() | ||
+ | |||
+ | return nowId | ||
+ | |||
+ | @ndb.transactionalを指定すると以下に続く処理が排他的に行われます。もし2つの処理が同時に走ったとき、UserIdCounterへの値の加算と取得がたとえば、 | ||
+ | |||
+ | +UserIdCounterの取得 | ||
+ | +UserIdCounterの加算 | ||
+ | +UserIdCounterの取得 | ||
+ | +UserIdCounterの加算 | ||
+ | |||
+ | となればもちろん問題ないのですが、 | ||
+ | |||
+ | +UserIdCounterの取得 | ||
+ | +UserIdCounterの取得 | ||
+ | +UserIdCounterの加算 | ||
+ | +UserIdCounterの加算 | ||
+ | |||
+ | となると同じ値をとって最後に2加算することになり、同じ値が返されることになります。@ndb.transactionalを指定することでこれを防ぐことが出来ます。 | ||
+ | |||
+ | データモデルは初期化の時にidというパラメータを指定することで、次からget_by_idというメソッドでデータを取得することが可能になり、一意のidがある場合はこれでデータの取り出しを行うと便利です。今回はデータは1つしか無いので固定でidを与えています。 | ||
+ | |||
+ | |||
+ | |||
準備中 | 準備中 |
- Google App Engine for Python その2 のバックアップ一覧
- Google App Engine for Python その2 のバックアップ差分(No. All)
- 1: 2015-07-01 (水) 08:09:21 njf
- 2: 2015-07-01 (水) 08:47:37 njf
- 3: 2015-07-02 (木) 14:45:17 njf
- 4: 2015-07-13 (月) 06:40:05 njf
- 5: 2015-07-14 (火) 10:19:20 njf
- 6: 2015-07-15 (水) 18:46:46 njf
- 7: 2015-07-20 (月) 17:01:01 njf
- 8: 2015-07-31 (金) 17:50:04 njf
- 9: 2015-08-01 (土) 17:31:58 njf
- 10: 2015-08-10 (月) 10:06:08 njf
- 現: 2015-08-15 (土) 16:34:45 njf
ぺージ情報 | |
---|---|
ぺージ名 : | Google App Engine for Python その2 |
ページ別名 : | 未設定 |
ページ作成 : | njf |
閲覧可 | |
グループ : | すべての訪問者 |
ユーザー : | すべての訪問者 |
編集可 | |
グループ : | すべての訪問者 |
ユーザー : | すべての訪問者 |
Counter: 3996,
today: 1,
yesterday: 0