タグ: データストア

Python

GAE/PのExpandoクラスの使い方

Google App Engineには「google.appengine.ext.db.Expando」というクラスが用意されています。このクラスを使うと、プロパティを動的に定義して使用することができます。なお、このクラス「google.appengine.ext.db.Model」のサブクラスであるため、データストアへの書き込みや読み込みなどを行うことができます。

続きを読む »

Python

GAE/PのDateTimePropertyのTimezoneに関する注意

Google App EngineのDatestoreには「DateTimeProperty」という日時を管理するPropertyがあります。このPropertyに日時を格納する際に、例え格納するdatetimeのインスタンスがTimezoneを持っていたとしても、TimezoneがUTCであるものとして保存されます。

続きを読む »

Python

GAE/PのEntityで多対多の関係を持たせる方法

Google App EngineのEntityに、多対多の関係を持たせる場合、以下の2つの方法を用いることで実現できます。

  1. 片方のEntityにListPropertyを定義
  2. 新しいEntityを定義して、それに両方のEntityのReferencePropertyを定義

1番目の注意点は、ListPropertyのサイズを大きくしないことです。

もし、ListPropertyのサイズが大きくなる可能性がある場合、2番目の方法を取る方が望ましいみたいです。

また、それぞれの関係に対して、何か情報を持たせたい場合もまた、2番目の方法をとることになります。

ただし、2番目の方法ではデータストアのアクセスが増えるため、本当に必要な場合のみ採用するべきとのことです。

参考)エンティティの関係のモデル化

Python

GAE/PのEntity GroupsとReferencePropertyの使い分け

GAE/PのEntity GroupsとReferencePropertyは、共にEntityに対して1:nの関係を持たせることができます。

この二つの使い分けの目安は、

  • 同一トランザクションで処理させる必要があるならばEntity Groups
  • 同一トランザクションで処理させる必要がないのならばReferenceProperty

とするみたいです。

参考)キーとエンティティグループ