【发布时间】:2018-04-11 10:10:03
【问题描述】:
我正在开发一个电子商务网站,用户可以在该网站上对可用产品表现出兴趣,我们将其作为潜在客户存储在 MySQL 表中。此 Leads 表包含数百万条记录,每分钟增长 8 条记录。表结构如下:
LeadId | ProductId | UserId | RequestDate(DateTime)
我的要求是在 30 天内只允许 x 个潜在客户。因此,我需要汇总数据以获取过去 30 天的潜在客户数量并相应地阻止用户。我需要有关以下方法的建议:
MySQL 聚合查询:我可以在 UserId 和 RequestDate 字段上添加索引并获取 30 天的计数。
使用 ElasticSearch:我可以创建一个包含这些字段的文档并在其上运行聚合。
汇总表:每天或每小时创建汇总表并获取计算数据。对于最近 x 个时间单位的数据的聚合,这可能很复杂。
我看到方法 2 的性能优势和方法 1 的维护优势。我应该使用以下哪种方法?
【问题讨论】:
-
您应该使用最适合您的团队技能和经验的解决方案。
-
我们的团队在 elasticsearch 和 mysql 技术方面拥有相同的经验。对这么多数据(大约 1000 万)使用弹性搜索可以吗?
标签: mysql elasticsearch aggregation