Я наткнулся на эту особенность Datastore App Engine, что на самом деле вам не нужно иметь постоянный корневой объект, чтобы иметь строго согласованное поведение с GAE. Вы можете использовать вычисленный ключ для хранения и загрузки дочерних объектов. Мой вопрос: Является ли это хорошей практикой или слишком сильно полагается на реалистичную причуду хранилища данных?GAE Ancestor Query Hack: это хорошая практика?
Вот пример использования Python. Эта идиома будет работать с Java тоже, я уверен.
Допустим, у вас есть дочернюю сущность:
CustomerReport(ndb.Model):
foo=ndb.StringProperty
bar=ndb.FloatProperty
#...
CustomerReports генерируются на основе типа реального объекта, клиент. Но вы можете сохранить с сильной консистенцией этого отчета субъектом путем вычисления ключа предка для несуществующего родительского объекта, как это:
ReportRoot(ndb.Model):
pass
Как так:
CustomerReport(parent=ndb.Key(ReportRoot, customer.key.id()), ...).put()
который может быть получен снова просто вычисляя ключ:
CustomerReport.query(ancestor=ndb.Key(ReportRoot, customer.key.id())).fetch()
спасибо.
Я мог бы использовать этот метод, чтобы избежать блокировки группы объектов клиента при создании и чтении отчетов. – Nikolai