将点击存储为大数据

时间:2018-09-27 11:18:02

标签: database postgresql bigdata

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

我的系统建立在PostgreSQL数据库上,并且知道我存储的点击次数如下:

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

我的项目列表应按最多点击次数进行排序。因此查询可能看起来像这样,以按点击对项目进行排序:

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。最重要的是,我从一开始就存储数据,而不会以缓慢的系统结束。 而且数据库最好应该是开源的。

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

克里里

1 个答案:

答案 0 :(得分:1)

如果表很大,此查询将以很大的方式吸引。

这不是PostgreSQL或任何其他数据库管理系统的缺点,而是由于对数据进行排序的开销为O(n × ln(n))

解决方法是预先汇总数据:

每当有点击进入时,您都会更新一个表,该表计算每个项目的点击次数。这很便宜,您可以立即获得结果。数据库触发器是必经之路!

该技术称为实例化视图