Google App Engine Go подсчет и сохранение результатов - PullRequest
0 голосов
/ 18 октября 2011

Я хочу создать простое приложение GAE на Go, которое позволит пользователям голосовать и хранить свои ответы двумя способами.Первым способом будут необработанные данные (хранилище базы данных «проголосовали за X»), вторым будет текущий подсчет этих голосов («12 голосов за X, 10 голосов за Y»).Как эффективно сохранить оба этих значения в приложении, к которому одновременно обращаются несколько человек?Если я получу данные из хранилища данных, изменим их и сохраню для одного экземпляра, другой может захотеть сделать то же самое параллельно, и я не уверен, будет ли окончательный результат правильным.

1 Ответ

1 голос
/ 18 октября 2011

Кажется, что хороший способ сделать это - просто сохранить все события голосования в виде отдельных объектов («проголосовал за X») и использовать Очередь заданий для пересчета (12 голосов).для X 10 голосов за Y "путь), поэтому пересчет выполняется в автономном режиме и последовательно (без каких-либо гонок и других проблем параллелизма).Затем вам придется периодически помещать задачу recalc в очередь, чтобы результаты обновлялись.

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

Другой способиспользовать goroutine в ожидании удара от входного канала, чтобы пересчитать результаты.Я не запускал такие программы в App Engine, поэтому не уверен в общем поведении этого подхода.

...