私はndbにはまったく慣れていませんが、モデルを作成するには脳の特定の領域を再配線する必要があることをすでに理解しています。ndb データベースの設計方法を理解するためだけに、単純なモデルを作成しようとしています。たとえば、ユーザーとその情報など、1 対 1 の関係があります。ドキュメントを見つけましたが、さまざまな例を見つけるのは困難でした。いくつかの異なる方法でモデリングとクエリを行いましたが、多くのことを検索した後、これが私が見つけた解決策です。
from google.appengine.ext import ndb
class Monster(ndb.Model):
name = ndb.StringProperty()
@classmethod
def get_by_name(cls, name):
return cls.query(cls.name == name).get()
def get_info(self):
return Info.query(Info.monster == self.key).get()
class Info(ndb.Model):
monster = ndb.KeyProperty(kind='Monster')
address = ndb.StringProperty()
a = Monster(name = "Dracula")
a.put()
b = Info(monster = a.key, address = "Transilvania")
b.put()
print Monster.get_by_name("Dracula").get_info().address
NDB は結合を受け入れないため、必要な「結合」は、クラス メソッドとプロパティを使用してエミュレートする必要があります。上記のシステムを使用すると、最初の一意のプロパティ (この場合は「名前」 - 同じ名前のモンスターが 2 人いないと仮定します) を介して、2 番目のデータベース (Info) のプロパティに簡単にアクセスできます。
ただし、100 個のモンスターの名前とそれぞれのアドレスを含むリストを印刷する場合、2 番目のデータベース (Info) は 100 回ヒットします。
質問: これをモデル化してパフォーマンスを向上させるより良い方法はありますか?