Могу ли я получить выгоду от отношений между родителями и ребенком без затрат на разногласия в хранилище данных? - PullRequest
2 голосов
/ 14 сентября 2010

Предположения: 1) Google AppEngine имеет концепцию групп объектов. 2) Объекты в группе объектов образуют дерево. Однако, насколько я понял, каждый метод put () для любой сущности в этом дереве на некоторое время блокирует все дерево (а не только его непосредственного родителя). 3) Пользователи могут писать ок. 5 раз в секунду к дереву. 4) Невозможно получить неблокирующее поведение (то есть сделать их неиндексированными свойствами)

Разумно ли было бы придумать мою собственную модель «родитель-потомок», которая не использует встроенные функции Key (как те, которые создают группы сущностей), а вместо этого использует некоторые соглашения snytax, которые я составил? Это позволило бы мне получить «дочернюю» сущность с помощью запроса вычислить родительский ключ.

Ответы [ 2 ]

4 голосов
/ 14 сентября 2010

Отношения предков, используемые группами сущностей, могут быть смоделированы в вашем собственном коде с использованием списка ссылок / ключей на родительские сущности.У корневых сущностей их не будет, потомки корневых сущностей будут иметь в своем списке только корневую сущность, у их потомков будет корень и их непосредственный родитель, и так далее.Вот как предки реализованы в App Engine для целей индексации, и это позволит вам делать такие же запросы.

1 голос
/ 14 сентября 2010

Вы можете использовать справочное свойство:

class Parent(db.Model):
    x = db.IntegerProperty()

class Child(db.Model):
    parent = db.ReferenceProperty(
        reference_class = Parent, 
        collection_name = 'children')
    y = db.IntegerProperty()
...