Группы сущностей в хранилище данных Google App Engine

Итак, у меня есть приложение, которому, если честно, не нужна целостность транзакций (много обновлений, ни одно из них не критично). Так что я планировал пока просто оставить группы сущностей в стороне. Но я все же хотел бы понять это (исходя из реляционного фона).

Насколько я понимаю, все запросы к моему приложению будут выполняться индивидуально для каждого пользователя. Поэтому мне не нужно группировать объект выше пользователя в соответствии с рекомендации документов. Но я не планировал иметь конкретную пользовательскую сущность, вместо этого полагаясь на UserProperty в самих сущностях.

Как я это вижу, если мне нужны транзакции (для каждого пользователя), мне понадобится какая-то сущность корневого пользователя в качестве родителя всех сущностей, которые являются частью иерархии ее данных, независимо от того, насколько тонка эта сущность. на самом деле было бы т.е. в основном никаких свойств.

Это правильно?

Извиняюсь за многословие, сегодня вечером я только действительно пропинговал, что на самом деле означает отсутствие схемы...


person rutherford    schedule 03.10.2009    source источник


Ответы (2)


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

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

Эта цитата взята из того же документа, на который вы ссылаетесь. .

person Peter Recore    schedule 30.10.2009

Как я это вижу, если мне нужны транзакции (для каждого пользователя), мне понадобится какая-то сущность корневого пользователя в качестве родителя всех сущностей, которые являются частью иерархии ее данных, независимо от того, насколько тонка эта сущность. на самом деле было бы т.е. в основном никаких свойств.

Я бы не стал просто создавать сущность пользователя root и помещать все в ее группу сущностей. Подумайте, для чего вам нужны транзакции. Если бы у вашей пользовательской сущности не было свойств, с чем бы вы использовали ее в транзакциях?

Я не знаю о ваших данных, но давайте предположим, что это система блогов, и у вас есть пользователи, сообщения и комментарии. Модель Post содержит число_комментариев, поэтому вам не нужно их подсчитывать. Вы можете захотеть, чтобы транзакции гарантировали безопасное обновление свойства number_of_comments при создании комментария.

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

Я написал короткую статью о группах сущностей в моем блоге сегодня. Вы можете найти это полезным.

person Danny Tuppeny    schedule 06.01.2010