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