首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >存储点击量作为大数据

存储点击量作为大数据
EN

Stack Overflow用户
提问于 2018-09-27 19:18:02
回答 1查看 91关注 0票数 1

我正在做一个项目,在这个项目中,我将存储在特定项目列表上所做的每一次点击。经过一些研究后,我一直在怀疑最聪明的解决方案是什么。

我的系统是建立在PostgreSQL数据库上的,我会像这样存储点击量:

代码语言:javascript
复制
id        itemId        userId        ipAdress        date
1         3             1             xx.xx.xx        01/01-2018
2         1             1             xx.xx.xx        01/01-2018
3         2             NULL          xx.xx.xx        01/01-2018
4         2             NULL          xx.xx.xx        01/01-2018
5         1             2             xx.xx.xx        01/01-2018

我的项目列表应该按最多的点击量排序。因此,查询可能如下所示,以获取按点击排序的项:

代码语言:javascript
复制
select i1.*, count(i1.id) as totalClicks from itemClicks ic1
left join items i1 
on i1.id = ic1.itemId
group by ic1.itemId
order by totalClicks desc

因此,这种方法工作得很好--至少不需要庞大的数据集。但在某一时刻,数据集中可能有数百万行。According to this article by researchgate.net是一个SQL server,执行聚合的速度要快得多,所以我想为什么继续将数据存储在SQL server中是有意义的。我使用PostgreSQL的原因(我知道)是因为没有最大数据库大小,据我所知,它对大型数据库很好。

就这一点而言,我对与MySQL (MariaDB)、PostgreSQL和MongoDB合作都很满意。最重要的是,我从一开始就存储数据,而不会导致系统变慢。数据库最好是开源的。

我希望有人能给我一些反馈,告诉我我是否在正确的轨道上。

小格子

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-28 03:24:21

如果表很大,那么这个查询就会很糟糕。

这不是PostgreSQL或任何其他数据库管理系统的缺点,而是排序数据以O(n × ln(n))为代价的结果。

解决这个问题的方法是预先聚合数据:

每当点击进入时,您都会更新一个表,该表计算每个项目的点击量。这很便宜,而且你可以立即得到你的结果。数据库触发器就是最好的选择!

这种技术称为物化视图。

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

https://stackoverflow.com/questions/52535747

复制
相关文章

相似问题

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