GAE объектные отношения: предок против контрольной опоры. против списка ключей - PullRequest
2 голосов
/ 31 октября 2011

Я работаю над приложением GAE Python для проведения выборов. У меня есть выборная организация для каждых выборов. На каждых выборах будет около 2-20 кандидатов, и у меня есть кандидатура для каждого кандидата.

Я рассматриваю три различных варианта моделирования отношений между сущностями:

  1. Выборы должны быть предком каждого Кандидата.

  2. Добавление к кандидату ссылочного свойства, которое относится к выборам.

  3. Добавление свойства списка в Election, содержащее список ключей-кандидатов.

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

Для моего избирательного приложения, каковы плюсы и минусы для каждого из трех вариантов выше?

Ответы [ 2 ]

2 голосов
/ 01 ноября 2011

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

Или вы можете использовать NDB и встраивать свои кандидатуры в свою избирательную организацию.

2 голосов
/ 31 октября 2011

Я предполагаю, что кандидат может принять участие в нескольких выборах, и на выборах будет более одного кандидата. Это отношение M2M, и единственный эффективный способ его реализации - использование списочных полей в App Engine.

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

Еще один совет: Помня об ограничениях записи в хранилище данных (5 / сек), вместо каждого действия «голосовать», обновляющего счетчик для этого кандидата, вы можете либо использовать защищенные счетчики , либо создавать новые задачи, которые запускаются в очереди задач с верхним пределом 5 заданий / сек .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...