我有一个网络应用程序,我需要跟踪“最受欢迎”(访问量最大)的文章。该应用程序中的大多数页面(包括文章页面)在侧栏中显示“最受欢迎”列表,因此将非常频繁地检索此列表。另一方面,文章也经常被访问(大约有一半的页面访问是访问文章页面)。
跟踪访问量并选择N个访问量最大的文章的最佳方式是什么?据我所知,它应该是一个并发的map articleId-> visitCount,它按值(visitCounts)排序,我可以快速(并且线程安全地)增加visitCount并期望map重新排序。
答案 0 :(得分:2)
对于Web应用程序,存储它的最佳位置是数据库。创建一个数据库,其中包含文章ID字段和访问次数字段。按访问次数对表格编制索引。每当查看文章时,添加记录或增加现有记录。当您需要查看最受欢迎的列表时,只需查询该表。
数据库通常是在Web应用程序中存储数据的最佳答案。
在这种情况下,数据库将根据访问次数对表进行索引。这使得它的插入和更新速度有点慢,但数据库的设计是为了完成这项工作,所以它不会太糟糕。由于维护索引,检索此数据总是超快。
答案 1 :(得分:1)
如果您不想使用数据库,则可以使用SortedSet
来存储包含文章ID和访问次数的对象。对象的比较将是访问次数。实现可能包括TreeSet
,它必须在多线程环境中进行外部同步,而ConcurrentSkipListSet
则不必在外部同步。
答案 2 :(得分:0)
就个人而言,我不会在更新期间尝试回答这个问题。您更有可能在每次访问时更新您的结构而不是阅读它。
当需要阅读时,请复制每个ID,访问#条目然后对其进行排序以进行显示。你会感到很惊讶它是多么便宜。