Организация групп сущностей в Google App Engine для написания - PullRequest
6 голосов
/ 19 января 2012

Я немного запутался в «Группах сущностей» в хранилище данных высокой репликации Google App Engine (HRD).В документации Google упоминается, что HRD разрешает только 1 запись в секунду на группу объектов.

Что именно это означает?Это 1 запись на запрос пользователя или 1 запись на сущность (я предполагаю, что это аналогично «таблице»).

Например, если у меня есть сущность «Пользователь» и «Пост»Таблица.Если «Post» является предком «User»:

  1. Означает ли это, что one «User» может создавать one «Post» в секунду
  2. ... или это означает, что все записи в объект "Post" ограничены 1 записью в секунду независимо от пользователя?(т. е. система может сохранять только 1 сообщение за раз, независимо от числа пользователей, отправляющих сообщения)
  3. ... или это означает, что один объект «Пользователь» не может создать более 1 «сообщения» вв то же время (даже если тысячи других пользователей создаются объектами "Post")?

Какие есть варианты для смягчения этого?Целесообразно ли создавать как корневые, так и пользовательские объекты?Позволит ли это мне создавать несколько экземпляров «Post» за пределами ограничения 1 запись в секунду?Я хочу избежать каких-либо потенциальных проблем, если, скажем, 1000 пользователей будут создавать записи «Публиковать» одновременно.

Ответы [ 2 ]

8 голосов
/ 19 января 2012

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

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

В моем приложении около 15 различных типов сущностей, и около 1,5 млн. Из них. Каждый из них является корневым объектом, даже связанным, и я думаю, что это идеально подходит для AppEngine. Насколько я могу судить, ЕДИНСТВЕННАЯ цель групп объектов заключается в поддержке атомарных операций с несколькими объектами - они не являются организационным инструментом.

PS: что касается ваших вопросов об ограничениях Entity Group (которые, я думаю, будут в основном для вас спорными): лимит записи для каждой сущности, а не для запроса. 1. Сущности не создают другие сущности. 2. Если все сообщения были в одной группе сущностей, то да, вы можете сэкономить только 1 в секунду. 3. Если бы каждый пользователь находился в своей собственной группе сущностей, вы можете написать по 1 записи в каждой группе одновременно, столько раз в секунду, сколько пожелаете. Просто ни одна группа не может быть написана более одного раза в секунду. Да, я думаю, что «Пользователь» и «Сообщение» должны быть корневыми объектами.

1 голос
/ 25 сентября 2012

Использование групп сущностей также способствует обеспечению высокой согласованности ваших данных в группе.

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

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

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

...