В настоящее время у меня есть приложение, размещенное на Виртуальной платформе Google, которое предлагает веб-аналитику и обеспечивает активность сеанса (клики, загрузки и т.д.) и связывает эту веб-активность с регистрацией в Интернете.
В настоящий момент мы сохраняем все данные данных профиля кликов и сеансов в MySQL и используем SQL-запросы для генерации как сводных, так и отчетов для каждого пользователя, однако по мере роста объема данных мы наблюдаем реальное замедление в ответах на запросы, что в свою очередь замедляет время загрузки страницы.
Изучая способы решения этой проблемы, мы рассмотрели инструменты, доступные в облачной платформе Google, такие как Dataproc и Dataflow, а также решения NoSQL. Однако мне трудно понять, как мы можем применить наше текущее решение для любых этих решений.
В настоящее время приблизительная идея нашей схемы данных выглядит следующим образом:
User table
- id
- name
- email
Profile table (web browser/device)
- id
- user id
- user agent string
Session table
- id
- profile id
- session string
Action table
- id
- session id
- action type
- action details
- timestamp
Основываясь на моих исследованиях, мое понимание того, каким было бы лучшим решением, было бы сохранение данных действий в решении базы данных NoSQL, таком как BigTable, которое передает данные в такое решение, как DataProc или DataFlow, которое генерирует отчеты. Однако, учитывая, что наша текущая схема является очень реляционной структурой, похоже, устраняет возможность перехода к решению NoSQL, поскольку все мои исследования показывают, что вы не должны перемещать реляционные данные в решение NoSQL.
Мой вопрос в том, насколько я правильно понимаю, как правильно применять эти инструменты? Или есть лучшие решения? Стоит ли даже рассматривать возможность перехода от MySQL? И если нет, то какие решения доступны, которые позволят нам, возможно, предварительно обработать/сформировать отчетные данные в фоновом режиме?