gpt4 book ai didi

mysql - 使用 MySQL 为每个用户保留每日排名日志的更有效方法是什么?

转载 作者:搜寻专家 更新时间:2023-10-30 20:31:47 25 4
gpt4 key购买 nike

我有一个名为 RankHistory 的数据库,该数据库每天填充每个用户的用户名和当天的排名(排名如 1、2、3 等)。我为每个用户保留 90 天前的日志,但我的用户群已经增长到保存这些日志的 MySQL 数据库现在超过 2000 万行。

此数据的记录仅用于生成图表,显示用户排名在过去 90 天内的变化情况。有没有比拥有这个将永远增长的庞大数据库更好的方法呢?

最佳答案

在这种情况下,对历史数据的需求有多大?我的第一个想法是截断早于某个阈值的数据,或者将其移动到不需要像当前数据那样频繁或快速访问的存档表。

您还提到为每个用户保留 90 天的数据,但该数据仅用于显示过去 30 天内排名变化的图表。额外的 60 天的数据是否用于查看前几个时期的变化?如果并非绝对有必要保留该数据(或者至少不将其保留在您的主要数据存储中,按照我的第一个建议),您可以巧妙地将数据量减少三分之二。

不过,我们有全貌吗?如果每个用户都有一个每日记录,并保留 90 天,那么如果您生成了超过 2000 万条记录,那么您必须拥有 25 万左右的用户。是这样吗?

更新:

根据下面的评论,我的想法是:如果你有数十万用户,并且必须为他们每个人保留一条数据,每天 90 天,那么你最终将拥有数百万条数据 - 没有简单的解决方法。您可以研究的是最小化该数据。如果您只需要显示每个用户每天的计算排名,并假设该排名只是给定用户在所有用户中的数字位置(例如 1 - 200000 之间的整数),则存储两千万这样的记录不应该对您的数据库资源造成不合理的压力。

那么,您到底关心什么?在上述情况下,绝对数据大小(即消耗的硬盘空间)应该相对易于管理。您应该能够通过索引处理性能,在一定程度上,超过该点,提到的数据截断和分区概念可以发挥作用(例如,将用户 block 保留在不同的表或数据库中,尽管这不是理想的设计...... .)

另一种可能性是,虽然具体细节有点超出我的专业领域,但您似乎有一个理想的人选 OLAP cube ,这里:您有一个事实(排名),您想要在二维(用户和日期)的上下文中查看。有一些工具可以有效地管理这种情况,即使是在非常大的数据集上也是如此。

关于mysql - 使用 MySQL 为每个用户保留每日排名日志的更有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4381225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com