【发布时间】:2017-11-13 09:53:24
【问题描述】:
目前我在 Google Cloud Platform 上托管了一个应用程序,它提供网络分析并提供会话活动(点击、下载等)并将该网络活动与网络注册联系起来。
目前,我们将所有点击和会话配置文件数据存储在 MySQL 中,并使用 SQL 查询来生成汇总报告和每用户报告,但是,随着数据量的增长,我们看到了真正的放缓在查询响应中,这反过来会减慢页面加载时间。
在研究解决此问题的方法时,我们研究了 Google Cloud Platform 上可用的工具,例如 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
根据我的研究,我对最佳解决方案的理解是将操作数据存储在像 BigTable 这样的 NoSQL 数据库解决方案中,它将数据馈送到像 DataProc 或 DataFlow 这样生成报告的解决方案中。但是,鉴于我们当前的架构是一种高度相关的结构,似乎取消了转向 NoSQL 解决方案的选项,因为我的所有研究都表明您不应该将关系数据迁移到 NoSQL 解决方案。
我的问题是,我对如何应用这些工具的理解是否正确?还是有更好的解决方案?甚至有必要考虑离开 MySQL 吗?如果没有,有哪些可用的解决方案可以让我们在后台预处理/生成报告数据?
【问题讨论】:
-
会话和操作表值是否已更新?我的意思是只有那些插入还是有更新?
-
会话表通过 cronjob 更新,该 cronjob 将一些数据(例如每个会话的操作计数)聚合到会话表中,但是,操作是仅插入的。
-
您可以在 MySQL 中保留一个临时会话表,一旦会话完成或在一天结束时将其全部转储到 BigQuery。
标签: mysql performance google-cloud-platform analytics bigdata