首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理内容排名系统?

如何处理内容排名系统?
EN

Stack Overflow用户
提问于 2019-07-13 23:48:03
回答 1查看 37关注 0票数 0

我知道这个问题用词很糟糕,所以我举个例子。

假设我们有一个存储数百个文件的文件系统,以及一个包含这些文件路径的数据库。数据库中文件的每个存储路径由多个点赞进行排名。一个文件的点赞数量可以起伏不定,而且经常出现这种情况。

现在我有一个客户端,他希望在第一页上获得前10个降序排列的文件,然后在第二页上获得下10个排列的文件,依此类推。

如果我们想要在客户端实时显示这些文件,我该如何处理这些文件排名的频繁更改。

每次向数据库发出请求,获取所有文件,然后按likes对其进行排序,感觉有点不对劲,因为数据库可能会变得非常大。

我还考虑在服务器上建立一个内存缓存,用来存储前X个排序的文件,甚至是所有文件。这样会更好吗?也许我可以使用套接字,并且对于文件之类的任何更改,我可以只通知客户端?

我真的不知道如何处理这个问题,甚至不知道做这些事情的正确方法是什么。

任何帮助都将不胜感激。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2019-07-14 15:20:31

我认为这里最简单的解决方案是实现一个专用的计数器表。表格将如下所示。

代码语言:javascript
复制
CREATE TABLE counter_table (
  file_path int(10) unsigned NOT NULL,
  like_count int(10) signed DEFAULT '0',
  PRIMARY KEY (file_path)
) ENGINE=InnoDB)

请注意,我已经将引擎指定为InnoDB,这与MyISAM不同,后者作为表级锁定,InnoDB实现行级锁定。这意味着与MyISAM不同,更新同一个表中的不同行的并发查询不会相互阻塞。

现在,您只需使用如下查询来更新每个文件的值。

代码语言:javascript
复制
UPDATE counter_table SET like_count = like_count+1 where file_path="XYZ";

此解决方案应服务于中等到高流量。当您开始接近非常高的流量时,您可能需要评估更多基于流聚合的解决方案,如Apache Spark Streaming

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

https://stackoverflow.com/questions/57020640

复制
相关文章

相似问题

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