Когда использовать группы сущностей в хранилище данных GAE

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

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

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

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

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

2 ответа

Решение

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

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

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

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

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

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

Другие вопросы по тегам