Служба, которая выполняет расширенные запросы к набору данных и автоматически возвращает соответствующие обновленные результаты каждый раз, когда новые данные добавляются в набор? - PullRequest
0 голосов
/ 28 мая 2019

Я ищу облачный сервис, который может выполнять расширенные статистические вычисления по большому количеству голосов, поданных пользователями, в «реальном времени».

В нашем приложении пользователи могут подавать голоса разного типа, например, избрать фаворита, выставить оценку 1-5, сказать да / нет и т. Д. По различным темам.

Мы также хотим показать «живую» статистику пользователю, показывающую популярность человека и т. Д. Это будет сгенерировано довольно сложным SQL, где мы вычисляем среднее число раз, когда человек был выбран как любимый, разделенный по общему количеству голосов и количеству игр, в которых человек принимал участие и т. д. И результат последних X игр должен быть выше общего результата всех игр. Это всего лишь пример, есть несколько других SQL-запросов с аналогичной сложностью.

Все наши презентабельные данные (включая вычисленную статистику) подаются из документов Firestore, а голоса будут сохранены как документы Firestore.

В идеале бэкэнд Firebase (функции, хранилище и т. Д.) Не должен знать о логике запроса.

Я хочу получить облачный сервис с оплатой по мере поступления, который выполняет следующие действия:

  1. Я определяю некоторые схемы и настраиваю запросы, которые нам нужны для статистики, которая у нас есть (15-20 различных SQL). Как настройка просмотров в MySQL
  2. При каждом голосовании мы отправляем данные голосования в эту службу, которая будет хранить их подряд.
  3. Служба должна затем, основываясь на своих знаниях об определенных запросах и содержимом данных об отправленных голосованиях, определить, на какие статистические данные влияет новая добавленная строка, и пересчитать их. Определенный тип голосования может повлиять на одну или несколько статистических данных.
  4. Каждый раз, когда статистика пересчитывается, результат должен автоматически отправляться обратно в наш бэкэнд Firebase (например, путем вызова конечной точки HTTPS, которая выполняет функцию облака), чтобы мы могли обновить соответствующие документы Firestore.
  5. Служба должна иметь возможность регулировать вычисления, например, только генерировать новую статистику каждые 1 минуту, несмотря на то, что по одной и той же теме предоставляется несколько голосов в секунду.

Есть ли такой продукт на рынке? Или он может быть построен путем объединения доступных облачных сервисов? И каков официальный термин для такого продукта, если я должен искать его сам?

Я знаю, что, возможно, сам смогу создать подобное решение и запустить его на сервере баз данных, размещенном в облаке, который может масштабироваться по мере роста наших потребностей, но я считаю, что я не первый разработчик, которому это необходимо , так что я надеюсь, что кто-то решил это до меня :)

1 Ответ

1 голос
/ 28 мая 2019

Вы можете использовать существующие облачные сервисы, доступные в облачной платформе Google. Google BigQuery , Google Cloud Firestore , Google App Engine (CRON Jobs), Google Cloud Tasks

Услуги могут быть использованы для решения проблем, упомянутых выше:

1) Google BigQuery: здесь вы можете определить схему для данных, для которых вы собираетесь выполнять SQL-запросы. BigQuery поддерживает стандартные и устаревшие SQL-запросы.

2) Каждый голос может быть помещен в определенные таблицы BigQuery с помощью сервиса потоковой вставки.

3) Каждый нажатый голос может вызвать службу пересчета, которая вычисляет статистику, выполняя определенные запросы SQL, и результаты запроса могут храниться в виде документов в коллекциях в Google Cloud Firestore.

4) Google Cloud Firestore: здесь вы можете хранить живую статистику пользователя. Это база данных в режиме реального времени, поэтому вы сможете настроить прослушиватели для изменений статистики и отобразить изменения, как только статистика будет пересчитана.

5) В том же сервисе, который вставляет каждый голос, создайте новую запись с «syncId» в другой таблице. Идея состоит в том, чтобы сгруппировать количество голосов, поданных за определенный интервал, в соответствующий ему синхронизирующий идентификатор. SyncId может быть дополнен временной меткой. В соответствии с вашим требованием может быть установлен конкретный интервал времени, чтобы пересчет мог быть запущен с использованием службы заданий CRON, которая вызывает службу пересчета в пределах интервала. Как только пересчет, связанный с конкретным syncId, завершен, запись, соответствующая syncId, должна быть помечена как завершенная.

Мы используем вышеуказанные технологии для создания веб-приложения на Google Cloud Platform, где входные данные записываются в Google Firestore, а затем вставляются в поток потоков в Google BigQuery. Данные, хранящиеся в BigQuery, запрашиваются через 30 секунд каждого обновления с использованием запросов SQL, а результаты запроса сохраняются в Google Cloud Firestore для обслуживания панелей мониторинга, которые автоматически обновляются с использованием прослушивателей, настроенных для коллекции, в которой хранится информация панели мониторинга.

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