0

Я наткнулся на эту особенность 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() 

спасибо.

ответ

2

Использование ключа как родителя, у которого нет соответствующего сохраненного объекта, отлично. Вам даже не нужно создать класс питона, просто использовать имя в виде строки:

parent=ndb.Key('ReportRoot', some_id) 

Ваш пример, хотя, кажется, смущен. Как вы думаете, что вы набираете, используя ключ Клиента в качестве родителей отчетов?

+0

Я мог бы использовать этот метод, чтобы избежать блокировки группы объектов клиента при создании и чтении отчетов. – Nikolai

Смежные вопросы