Как я создаю гибкий счетчик с 1 000 + строки, но немного чтений в Google App Engine?

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

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

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

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

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

5
задан Community 23 May 2017 в 12:25
поделиться

2 ответа

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

2
ответ дан 15 December 2019 в 00:49
поделиться

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

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

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

2
ответ дан 15 December 2019 в 00:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: