java - 并发映射按具有快速增量值操作的值排序

标签 java data-structures concurrency

我有一个 Web 应用程序,我需要在其中跟踪“最受欢迎”(访问量最大)的文章。该应用程序中的大多数页面(包括文章页面)在侧边栏中显示“最流行”列表,因此该列表将被经常检索。另一方面,文章的访问也很频繁(大约 1/2 的页面访问是对文章页面的访问)。

跟踪访问并能够选择 N 篇访问最多的文章的最佳方法是什么?据我所知,它应该是一个并发 map articleId->visitCount,它按值 (visitCounts) 排序,我可以在其中快速(和线程安全地)增加 visitCount 并期望 map 重新排序。

最佳答案

对于 Web 应用程序,最好将其存储在数据库中。创建一个数据库,其中包含文章 ID 字段和访问次数字段。按访问次数索引表。每当查看文章时,添加记录或增加现有记录。当您需要查看最受欢迎的列表时,只需查询该表即可。

数据库通常是网络应用程序中数据存储位置的最佳选择。

在这种情况下,数据库会根据访问次数对表进行索引。这使得插入和更新速度变慢了一点,但是数据库就是为完成这项工作而设计的,所以它不会太糟糕。由于维护的索引,此数据的检索将始终非常快。

关于java - 并发映射按具有快速增量值操作的值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3806214/

相关文章:

c++ - 如何使用 <int, int> 和 <string, int> 等模板测试给定的 ADT 实现?

java - 估计算法运行时间的增长顺序

java - 多语言Java应用程序中的字体问题

MySQL "default"结果

java - 读取csv文件的值并将其显示在AWT表中

java - 处理线程最大执行时间的最佳方法(在 Java 中)

java - 阻塞还会导致线程饥饿吗?

c++ - 将 concurrent_vector 转换为 std::vector

java - 格式化时间正则表达式以需要 AM/PM

java - 如何在 thymeleaf 中使用 math.max 来查找最大数字?