gpt4 book ai didi

database - 将点击存储为大数据

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

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

我的系统是建立在 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 服务器进行聚合要快得多为什么我想继续将数据存储在 SQL 服务器中是有意义的。我之所以选择 PostgreSQL(知道)是因为它没有最大数据库大小,据我所知,它适用于大型数据库。

就此而言,我对使用 MySQL (MariaDB)、PostgreSQL 和 MongoDB 都很满意。最重要的是我从一开始就存储数据,而不会以缓慢的系统结束。并且数据库最好是开源的。

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

克里利

最佳答案

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

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

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

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

这种技术称为物化 View

关于database - 将点击存储为大数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52535747/

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