#java #android #google-app-engine #google-cloud-datastore #sharding
#java #Android #google-app-engine #google-облако-хранилище данных #сегментирование
Вопрос:
У меня есть клиент Android, который работает с товарными позициями, и я хотел бы создать интерфейс для отображения самых популярных программ в любой момент времени.
Я прочитал и использовал счетчики сегментов для достижения высокой масштабируемости и параллельного подсчета. Это хорошо работает в том, что касается подсчета.
Однако проблема возникает, когда приходит время вычислить 10 самых популярных товарных позиций для одного запроса, я должен сначала получить все объекты продукта, получить счетчики сегментов для каждого и сложить их, а затем, наконец, отсортировать их, чтобы получить самые популярные.
Проблема здесь в том, что для того, чтобы выяснить, что является самым популярным, я должен пересчитать все счетчики сегментов. Умножьте это на 10000 наименований продуктов, и мой запрос для одного пользователя станет чертовски медленным.
Я подумал об идее использования задания cron для вычисления результата и сохранения его вместо этого. Вы бы порекомендовали мне пойти по этому пути? Кто-нибудь еще сталкивался с подобной ситуацией?
Спасибо!
Ответ №1:
Либо регулярно объединяйте счетчики в одно значение, доступное только для чтения, как вы предлагаете, либо используйте альтернативный способ сохранения счетчиков с высоким уровнем параллелизма, например.
Если вы придерживаетесь первого подхода, вы, вероятно, захотите использовать mapreduce, запускаемый из cronjob.