【问题标题】:Aggregations in MySql vs ElasticSearchMySql 与 ElasticSearch 中的聚合
【发布时间】:2018-04-11 10:10:03
【问题描述】:

我正在开发一个电子商务网站,用户可以在该网站上对可用产品表现出兴趣,我们将其作为潜在客户存储在 MySQL 表中。此 Leads 表包含数百万条记录,每分钟增长 8 条记录。表结构如下:

LeadId | ProductId | UserId | RequestDate(DateTime)

我的要求是在 30 天内只允许 x 个潜在客户。因此,我需要汇总数据以获取过去 30 天的潜在客户数量并相应地阻止用户。我需要有关以下方法的建议:

  1. MySQL 聚合查询:我可以在 UserId 和 RequestDate 字段上添加索引并获取 30 天的计数。

  2. 使用 ElasticSearch:我可以创建一个包含这些字段的文档并在其上运行聚合。

  3. 汇总表:每天或每小时创建汇总表并获取计算数据。对于最近 x 个时间单位的数据的聚合,这可能很复杂。

我看到方法 2 的性能优势和方法 1 的维护优势。我应该使用以下哪种方法?

【问题讨论】:

  • 您应该使用最适合您的团队技能和经验的解决方案。
  • 我们的团队在 elasticsearch 和 mysql 技术方面拥有相同的经验。对这么多数据(大约 1000 万)使用弹性搜索可以吗?

标签: mysql elasticsearch aggregation


【解决方案1】:

将所有超过 30 天的潜在客户移至存档表以减少行数。当您将数据复制到存档时,为每个用户创建一个正数计数器并每天增加它。如果用户添加潜在客户,请减少它。如果计数器为零,则无法添加来自该用户的任何其他潜在客户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 2014-11-18
    • 1970-01-01
    • 2018-07-05
    • 2014-09-17
    • 1970-01-01
    相关资源
    最近更新 更多