首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在数据库中有效地存储频繁数据(源-目的地组合)以获得过去30天的top10搜索

如何在数据库中有效地存储频繁数据(源-目的地组合)以获得过去30天的top10搜索
EN

Stack Overflow用户
提问于 2016-09-16 05:39:37
回答 1查看 72关注 0票数 0

我正在尝试编写一个算法,用于插入频繁的数据搜索。假设用户可以搜索两个实体的不同组合(源-目的地),每次用户搜索时我想用计数存储数据,如果他搜索相同的组合(源-目的地),我将更新计数。在这种情况下,如果用户是1000,如果用户搜索0不同的组合(源-目的地)和数据将存储30天。

因此,行的总数将是100000*30*30=13500000(13亿)行。(使用Mysql)

如果有更好的方法写这个,请给我建议。

目标:,我希望在任何时候都能获得十大Searach用户组合。

EN

回答 1

Stack Overflow用户

发布于 2016-09-16 05:56:51

按照今天的标准,1,000用户和60,000行都算不上什么。甚至不要去想它,没有任何性能方面的考虑,所以只需要把注意力集中在正确地去做,而不是担心缓慢。不会有慢的。

正确的方法是创建一个表,其中每行包含搜索项(在您的情况下是源、目标)和和,并对源列和目标列使用唯一的索引。这与将这两列作为主键相同。

如果您有100,000,000行,而且性能非常重要,而且您还拥有庞大的预算,可以做任何奇怪的事情来维持收支平衡,那么您可能会想要做一些奇特的事情,比如将每个搜索附加到一个无索引表(允许尽可能快地追加),然后在一个夜间批处理过程中计算总和。但是,在少于一百万行的情况下,这样的方法将是完全过度的。

编辑:

啊哈,所以真正的问题是OP需要一个“滑动窗口”。在这种情况下,除了保存每一个搜索以及发生的时间之外,我看不到任何方法,在批处理过程中,( a)计算和( b)删除比“窗口”更老的条目。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39524397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档