如何处理某些事件发生的次数?

时间:2017-08-21 19:14:58

标签: java performance processing-efficiency

尝试获得处理书籍数量的最佳实践"我喜欢" d。我们现在就说,我有很多系列的书,每个系列都可以有很多书。现在,当人们点击"我喜欢"对于一本书,我想在书中加1,并在系列中加1,以便以后我可以相应地渲染这些数字。现在,我在两个方面都很挣扎。

1)当点击一本书时,我会在"喜欢"上添加1。书表中的列,同时在"喜欢"上添加1系列表中的列。

2)当点击一本书时,我只在"喜欢"上添加1。书表中的列。当我尝试渲染系列的数字时,我会对"喜欢"属于该系列的书籍栏目。

然而,两者都有利弊。 1)方式,我可以简单地获取"喜欢"当我试图展示有多少人喜欢整个系列时,系列表的列。它将比2)方式更有效,因为不需要聚合,特别是当许多人尝试渲染系列页面时。但是,当我们点击"我喜欢"这将需要更多的努力。按钮。甚至当人们点击不同的书籍时也会导致只要这些书属于同一系列,就需要更新系列的编号。它将是并发过程。相反,当人们点击"我喜欢"时,如果我不对系列表进行更新。为了这本书。它会在这个级别上更有效率,但是当许多人尝试加载相同的系列页面时,会浪费很多精力来进行冗余聚合计算,其中"喜欢"显示该系列的编号。

还有其他想法吗?如果不是,什么是更好的解决方案? 1)或2)?提前谢谢。

5 个答案:

答案 0 :(得分:0)

使用HttpSession

HttpSession session = request.getSession(false);
if (session == null) {
    // store value in session
}
else {
    // read value from session
}

另一种选择是将Redux用于较大的单页应用程序,但前提是有意义。

答案 1 :(得分:0)

我更喜欢第二种方法。那里的逻辑更有意义。每次点击这本书时,你不仅可以在系列中添加1,而是可以总结该系列中的喜欢总数。

答案 2 :(得分:0)

将数据存储在数据库中,否则将在服务器重新启动时丢失数据。

答案 3 :(得分:0)

使用RDBMS,您应该关注data integrity。如果不在单个事务中完成,第一种方法可能引入更新异常。无论如何,你在系列计数器上会有很高的并发性。所以我更喜欢第二种方法。

仅在您的解决方案缺乏性能时才从denormalization开始。

答案 4 :(得分:0)

我建议使用数据库。你可以有一张书桌和一张桌子。当有人喜欢一本书时,你会把他们喜欢的书的内容添加到喜欢的书中。

这样你也可以存储喜欢它的人的名字,并阻止他们喜欢两次以上,你也可以给他们删除他们喜欢的选项。 例如:

图书表:

id,bookname,author,(以及任何其他信息)

喜欢表:

id,username,book_id,date

然后,当计算一本书有多少喜欢时,你可以查询数据库并计算book_id =的行数?