Как создать гибкий счетчик с 1000+ строками, но с небольшим чтением в Google App Engine? - PullRequest
5 голосов
/ 29 июня 2010

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

Однако проблема в том, что администраторы также имеют доступ к различным поисковым фильтрам (вGUI), например, просмотр только пользователей мужского и женского пола и т. Д.Важно, чтобы подсчет отражал эти фильтры, чтобы они могли получить число пользователей женского пола, пользователей мужского пола и множество других комбинаций.

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

Должен ли я просто создать цикл методов count (), таких как описанные здесь илиэто очень плохая практика?Как бы я сделал это иначе?

Обратите внимание, что этот счетчик предназначен для интерфейса администратора и имеет очень ограниченное число операций чтения.Это действительно тот случай, когда я хотел бы пожертвовать некоторой производительностью чтения для гибкости и точности.Несмотря на то, что он должен быть в состоянии превышать 1000, он не должен превышать 10 000.

Ответы [ 2 ]

2 голосов
/ 29 июня 2010

Я испробовал два подхода:

1) Напишите свою собственную задачу, которая запрашивает хранилище данных (запрос представляет собой запрос по убыванию ключа) с фиксированным пределом сущностей (скажем, 50).Затем он ставит в очередь следующую задачу, чтобы начать запрашивать, где он остановился.Каждая задача ставит в очередь следующую, передавая ей два параметра (где она в последний раз была остановлена, как курсор, и промежуточная сумма количества объектов, которые она видела).

2) Этот подход намного проще - и этоиспользовать библиотеку mapreduce, предоставленную Google для appengine.Он работает полностью в пространстве пользователя, поэтому вам просто нужно скачать и собрать библиотеку и включить ее в свой проект.По сути, он будет обрабатывать итерации по всем указанным вами сущностям и позволит вам написать обработчик для того, что делать с каждым (например, увеличивать счетчик).Подробности смотрите здесь: mapreduce.appspot.com - у них даже есть пример приложения, которое делает именно то, что вы просите.Единственная проблема с этим заключается в том, что результаты будут отображаться в вашем браузере и не обязательно сохраняться в хранилище данных, если вы сами не сделаете это.

2 голосов
/ 29 июня 2010

«Цикл отсчетов» медленный, но в наши дни вы можете сделать его немного лучше с помощью курсоров .Обычно я бы рекомендовал денормализовать все нужные вам «отфильтрованные» счетчики, но это замедляет добавление и удаление пользователей (и, вероятно, также демографические изменения), поэтому, учитывая ваш конкретный вариант использования с очень малым объемом операций чтения, вы, вероятно, можетеуйти с подходом «петли отсчетов» (плюс курсоры; -).

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