Как обрабатывать большие наборы данных в режиме реального времени? - PullRequest
0 голосов
/ 19 октября 2019

Мы создали отчет, который для указанного диапазона дат просматривает БД и получает поступления от продаж для бизнеса. Каждая квитанция может иметь десятки строк товаров, и может быть сотни квитанций в день. Также может быть несколько магазинов, каждое с позициями в чеках, которые являются такими же, как в других магазинах.

Вот наша проблема: за 10-месячный диапазон дат (например, отчет с начала года) у нас есть 8 миллионов «строк» ​​поступления для счета в 22 магазинах. Отчет извлекает их из БД, а затем зацикливает и «сворачивает» строки, когда элемент совпадает (поэтому он дает общее количество по уникальному элементу для всех 22 магазинов в диапазоне дат). Поэтому у нас не хватает памяти на сервере (64 ГБ) даже до того, как он завершит обработку всех данных. При выполнении этого для небольшого подмножества магазинов отчет завершается, но загружать его недопустимо медленно.

Идеальное решение: нужен ли здесь MapReduce? Как мы можем получить этот отчет: 1) генерировать по требованию, не превышая объем памяти, и 2) выполнять за разумное время (возможно, 15 секунд или меньше?)

Мы размещены на AWS ииспользуя экземпляр m5.4xlarge. Мы используем Play Framework (версия Java) с базой данных MySQL. Получение фактических строк не является проблемой и происходит относительно быстро.

Является ли распределение нагрузки между несколькими серверами и параллельная работа единственной возможностью? И если так, каков наилучший способ сделать это? Amazon EMR?

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