每天 100 万次点击的 MySQL 解决方案

标签 mysql partitioning openx

关闭。这个问题是off-topic .它目前不接受答案。












想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。

8年前关闭。




Improve this question




我们在 MySQL 数据库上运行一个自定义的 OpenX 广告服务器,该数据库获得大约。 100 万次点击/天。我们需要存储所有这些点击信息并根据它显示统计信息。

现在,所有点击信息每 2 天汇总一次,并删除特定点击信息。但是我们希望为我们的附属公司提供一项新功能,允许他们设置动态跟踪 ID (TID),并且基本上基于此跟踪他们的点击和转化。

所以,问题是我们的点击表每天至少会增加 100 万个条目,我们需要能够搜索这个表并显示特定时间段内一个用户的所有点击,按 TID 分组我上面提到过,或者通过TID搜索。

我查看了 MySQL 分区,它似乎是一个不错的解决方案,但是,我不确定它是否仍能在巨大的数据库(可能有数十亿个条目)上正常工作。

您认为解决此问题的正确方法是什么?

编辑:

根据您的回答,我现在正在考虑混合解决方案。

我们已经有一个“LIVE”表,在维护时聚合点击时将从该表中删除条目,它看起来像这样:

表:点击次数

查看者_id | ... |日期时间 |成员(member)_id | ... |时间

(我跳过了此时不重要的列)

在维护时,我可以将所有内容移到另一个看起来几乎相同的月度表中,例如 表:clicks_2012_11 ,其中包含 的索引日期时间 , affiliate_id 时间 并由 分区affiliate_id .

所以现在,当一个成员(member)想要查看他过去 2 个月的统计数据时,我知道我必须查看 。表:clicks_2012_10 表:clicks_2012_11 (我将时间范围限制为最多 2 个月)。因为我有由 分区的表affiliate_id ,将仅从 2 个表中搜索所需的分区,我现在可以列出过去 2 个月内有任何事件的所有 TID。

您如何看待这种方法?有什么明显的问题吗?我是否在没有充分理由的情况下把事情复杂化了?

最佳答案

大(甚至“巨大”)表中没有任何内在的东西会导致 MySQL 失败。大表主要是以下方面的问题:

  • 磁盘空间
  • 缓存使用情况(您可能无法在内存中运行)
  • 维护(架构更改、重建...)

  • 您需要解决所有这些问题。

    分区主要用于批量数据维护,例如删除整个分区。默认情况下,仅在某些列上对大表进行分区当然不是最佳实践。总是出于特定原因引入分区。

    关于每天 100 万次点击的 MySQL 解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13120925/

    相关文章:

    php - 变量不通过

    php - Mysql查询错误

    redis - 直接从 Redis 集群中的副本读取

    sql-server-2008 - 大量插入索引较高的子项(Sql Server 2008)

    mysql - 在 NATURAL JOIN 上使用 WHERE 子句

    MySQL事务和触发器

    postgresql - 使用自动分区创建在 PostgreSQL 11 中进行表分区?

    基于 MySQL 只读列

    ads - 主 Openx 服务器不处理从属统计信息

    openX 替代品,可能是自托管的