Когда использовать группы сущностей в хранилище данных GAE - PullRequest
10 голосов
/ 01 декабря 2010

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

Возьмите этот простой пример:

  • Каждый Company имеет одну или несколько Employee сущностей
  • Employee нельзя переместить в другую Company, и пользователи, которые имеют делос одним Company никогда не будет видно Employee с другого Company

Это похоже на случай, когда я мог бы сделать Employee дочерним объектом из Company, но каковы практические последствия?Это улучшает масштабируемость, ухудшает масштабируемость или не оказывает влияния?Каковы другие преимущества / недостатки использования или неиспользования иерархии сущностей?

( Группы сущностей разрешают транзакции, но предполагают, что в этом примере мне транзакции не нужны).

Ответы [ 2 ]

9 голосов
/ 01 декабря 2010

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

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

8 голосов
/ 01 декабря 2010

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

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

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

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

...