Отношения один-ко-многим в НДБ
Я читаю на Google app engine и готовлю образец, чтобы лучше понять его.
В двух словах пользователь может записать запись на каждый день месяца, как в календаре. И пользователь может просматривать записи на ежемесячной основе. Так что не более 30 иш за раз.Первоначально я использовал db
, и отношение "один ко многим" было прямым.
ndb
, я понял, что есть два способа моделирования одного ко многим. отношения.
1) структурированное свойство, по-видимому, действует как повторяющееся свойство в пользовательской модели. Означает ли это, что если я получу одного пользователя, я автоматически получу все записи, которые она ввела? (например, весь год) это не очень эффективно, не так ли? Я думаю, что преимущество заключается в том, что вы получаете все связанные данные в одной операции чтения.
from google.appengine.ext import ndb
class User(UserMixin, ndb.Model):
email = ndb.StringProperty(required = True)
password_hash = ndb.TextProperty(required = True)
record = ndb.StructuredProperty(Record, repeated=True)
class Record(ndb.Model):
notes = ndb.TextProperty()
2) в качестве альтернативы я мог бы использовать, возможно, более классический способ:
class User(UserMixin, ndb.Model):
email = ndb.StringProperty(required = True)
password_hash = ndb.TextProperty(required = True)
class Record(ndb.Model):
user = ndb.KeyProperty(kind=User)
notes = ndb.TextProperty()
Какой способ лучше в моем использовании случае?
1 ответ:
Недостатком использования StructuredProperty вместо KeyProperty является то, что при использовании StructuredProperty ограничение на общий размер сущности (1 МБ) применяется к сумме пользователя и всех записей, которые он содержит (поскольку структурированные свойства сериализуются как часть сущности пользователя). С этот, каждая запись имеет 1МБ лимит сам по себе.