Пояснение: могу ли я поместить все данные пользователя в одну группу сущностей, составив ключ предка? - PullRequest
1 голос
/ 08 октября 2010

Я хочу выполнить несколько операций с данными пользователя в одной транзакции, но мне не нужно обновлять данные нескольких пользователей в одной транзакции. Из http://code.google.com/appengine/docs/python/datastore/keysandentitygroups.html#Entity_Groups_Ancestors_and_Paths я вижу, что «хорошее практическое правило для групп сущностей заключается в том, что [группы сущностей] должны иметь размер данных одного пользователя или меньше», поэтому я считаю правильным выбрать один родительский ключ при создании ключей для других сущностей, связанных с пользователем.

  1. Это кажется хорошей идеей?
  2. Легко ли кодировать? Что-то вроде KeyBuilder.setParent (theKeyOfMyUserEntity)?

Ответы [ 2 ]

3 голосов
/ 08 октября 2010

1) Трудно комментировать без дополнительных подробностей о данных. Есть несколько вещей, о которых вы должны знать с группами сущностей; самое большое, что группа будет храниться вместе. Это означает, что если вы пытаетесь сделать много (отдельных) обновлений, вы можете столкнуться с конкуренцией, что ограничивает производительность вашего приложения.

2) да, это легко закодировать. Синтаксис очень близок к тому, что вы опубликовали.

Существуют и другие варианты транзакций. Прочтите статью Ника Джонсона о распределенных транзакциях. Если вы хотите транзакции для агрегатов, вам также следует ознакомиться с выступлением Бретта Слаткина о высокопроизводительных конвейерах данных .

2 голосов
/ 08 октября 2010
  1. Да, представляется целесообразным хранить некоторые пользовательские данные в качестве дочерних объектов объекта User.

  2. Зачем вам нужно вручную создавать ключи? Конструктор db.Model () уже имеет удобный аргумент «parent», который автоматически помещает родительскую и дочернюю сущности в одну группу сущностей.

...