尝试获得处理书籍数量的最佳实践"我喜欢" d。我们现在就说,我有很多系列的书,每个系列都可以有很多书。现在,当人们点击"我喜欢"对于一本书,我想在书中加1,并在系列中加1,以便以后我可以相应地渲染这些数字。现在,我在两个方面都很挣扎。
1)当点击一本书时,我会在"喜欢"上添加1。书表中的列,同时在"喜欢"上添加1系列表中的列。
2)当点击一本书时,我只在"喜欢"上添加1。书表中的列。当我尝试渲染系列的数字时,我会对"喜欢"属于该系列的书籍栏目。
然而,两者都有利弊。 1)方式,我可以简单地获取"喜欢"当我试图展示有多少人喜欢整个系列时,系列表的列。它将比2)方式更有效,因为不需要聚合,特别是当许多人尝试渲染系列页面时。但是,当我们点击"我喜欢"这将需要更多的努力。按钮。甚至当人们点击不同的书籍时也会导致只要这些书属于同一系列,就需要更新系列的编号。它将是并发过程。相反,当人们点击"我喜欢"时,如果我不对系列表进行更新。为了这本书。它会在这个级别上更有效率,但是当许多人尝试加载相同的系列页面时,会浪费很多精力来进行冗余聚合计算,其中"喜欢"显示该系列的编号。
还有其他想法吗?如果不是,什么是更好的解决方案? 1)或2)?提前谢谢。
答案 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 =的行数?