我想比较一下在网络论坛上发布很多问题的人和回答很多问题的人。我需要打印出谁提出问题和谁回答了问题的前10名用户。我已经编写了一个生成列表的脚本。但它花费的时间太长,使用的内存太多,效率很低。
我写的代码使用的是HashMap。用户和帖子的.xml文件非常大。实际数据大约是5-6 is。
我需要知道提高时间、效率和性能的最佳方法。
发布于 2014-02-27 08:16:12
有几种方法:
1)时不时地更新:你不会显示“实际”值,你会时不时地计算它(如果它足以实现你的目标,甚至一个月一次)并存储结果。您只需显示结果。
2)使用冗余结构:您已经将相同的信息存储了两次,但是不同,因为每一次都可以帮助您快速找到其他信息。例如,如果您经常想要显示论坛中所有帖子的总和,但又不想逐一统计,则可以有额外的列,该列会在添加新帖子时更新,用于存储帖子的总数。
注意,你必须小心使用它,因为如果你做错了什么,它可能会导致数据不一致(但只要你只是为了一些花哨的事情而使用你的冗余结构,比如显示前5名,它就很好)
发布于 2014-02-28 07:43:13
您要使用的是heavy hitters算法。这真的很酷。它是一种一次性算法;可以实时更新,也可以事后更新。
每次用户提出问题或发布答案时,您都会通知数据结构,它会跟踪排名前k的“重量级用户”。当其中一个用户退出前k名时,它确实变得有点模糊。
以下是一些资源:
发布于 2014-03-06 06:40:10
向users表中添加两列: questions_count、answers_count。而不是把所有这些都放到内存中,只需浏览每一条消息,确定它是一个问题还是答案,然后更新发布该消息的用户。更新您的论坛软件,以便在提交消息时进行分析,以便在您完成第一个过程后,论坛将为您更新数据。有了这两列,它就变成了两个简单的查询,用来获取提问和回答问题的前十名用户。
如果你想变得花哨,并跟踪谁在不同的时间跨度内提问和回答(“谁是本周十大提问者?”或者“今年谁回答了最多的问题?”),那么您将需要创建一个跟踪user_id, message_id, message_type(question|answer), timestamp
的新表。这将允许您使用单个SQL调用来回答大多数类型的问题。
https://stackoverflow.com/questions/22056287
复制相似问题