Пожалуйста, помогите мне понять иерархии сущностей в хранилище данных GAE - PullRequest
4 голосов
/ 20 ноября 2010

Хранилище данных Google App Engine позволяет каждой сущности иметь родительскую сущность , по сути, способ формирования иерархии сущностей . Например, Employee может быть адресовано как:

Company#521/Department#5/Employee#3

Идентификатор объекта уникален только среди объектов с одним и тем же родителем, поэтому для его уникальной адресации требуется полный путь к объекту.

Пока все хорошо.

Но когда мне следует смоделировать отношения родитель-потомок таким образом, а не полагаться на базовое ссылочное свойство внутри сущности, как в традиционной базе данных?

Единственная причина, по которой я могу придумать, - это обойти отсутствие объединений в запросе хранилища данных. Я могу фильтровать запрос только по свойствам от объекта, вид которого я получаю, и от любого объекта, который является родителем на любом уровне в иерархии объекта.

Любая другая причина использовать эту функцию?

Документация хранилища данных говорит, что объекты, принадлежащие к одной и той же иерархии, рассматриваются как группа объектов , и что объекты в той же группе объектов имеют сериализованный доступ для записи. Что именно это означает? Означает ли это, что если один поток моего приложения обновляет Department#5, другой поток, который пишет в Employee#3, должен будет ждать завершения этого обновления?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 22 ноября 2010

Вы должны использовать группы объектов только там, где это необходимо для определения транзакционных доменов.В App Engine транзакции могут изменять только объекты в одной группе объектов, то есть объекты с одним и тем же родителем.Если вам не нужна целостность транзакций между двумя объектами, они не должны находиться в одной группе объектов.

Если вам абсолютно необходимы глобальные транзакции, вы можете реализовать их самостоятельно - см. мой пост на тему для примера.На самом деле, относительно небольшая доля приложений действительно нуждается в глобальных транзакциях.

1 голос
/ 20 ноября 2010

Типичное использование Родительская функция вместо ReferenceProperties предназначено для транзакций .
Google App Engine разрешает транзакции только для объектов в одной и той же группа сущностей , то есть набор сущностей с одним и тем же родителем.

...