简而言之: 在考虑为大型受众网站制作简单新闻提要的最佳方法的同时,我给出了两种解决方案。我将介绍这两种解决方案,但最重要的是,我将它们发布在这里,以便对它们有最多的意见,并且主要是想知道您是否有更好的方法来进行设置。 因此,我非常欢迎所有反馈/建议。
详细信息:
在数据库中,有3个表:用户,作者和图书。用户可以订阅作者,而作者正在写书。这就是它的样子。
所需要的是一个简单的新闻提要:向用户显示他们所订阅的作者出版的最新书籍的列表。像这样: *
*
解决方案:
我想到的第一个解决方案是: 加载新闻时,只需进行简单的SELECT,即可在发布日期之前将所有相关表和订单连接起来。
问题在于,尽管它是最简单,最快的解决方案,但我一直不停地想着这是一个非常繁重的查询,当被大量受众执行时,它将对很多应用程序性能产生很大影响。
然后是第二个解决方案,需要更多解释:
对于网站系统,有2台服务器:公共服务器和公共服务器,公共服务器使用主数据库托管公共网站,第二台服务器具有备份/更新数据库。第二台服务器不可公开访问,但是两台服务器每天都同步。
因此,所有新的作者和书籍插入都是在此插入的,而用户的抄写和所有用户的活动都是在公共服务器上完成的。
所以我找到了第二个解决方案,就性能而言,最好的解决方案是添加一个新表 Notification ,并在 Publication 表上设置mysql触发器。插入每个新发布后,触发器将选择所有订阅作者的用户,并在通知表上向其插入新条目。
这样,公共服务器上剩下的唯一任务就是选择用户的新通知并显示它们。
我已经对该触发器的1万用户进行了测试,我认为mysql的反应非常快。
所以现在,即使第二个解决方案是获胜者,我还是向你们展示了这两种方法,以便对这个优化问题有最大的见解。
谢谢大家阅读并等待答案。
答案 0 :(得分:0)
每个表中有几行?如果不到一百万,我认为较简单的(第一个)解决方案没有问题。
-那是我的“观点”和“经验”。
此外,我建议使用更简单的提案进行统计。然后,与任何大型项目一样,计划要在几个月后重新考虑该决定。您可能会发现简单的解决方案“足够好”。或者,您可能会发现一个简单的修复程序,使其足够好。或者,您可以选择对其进行修改-包括重新设计架构,UI和所有内容。
-再次,我来自“观点”和“经验”两个方面。
两个服务器都每天同步
不。使用复制可以使它们始终保持同步。或使用群集技术(例如Galera)为您提供备份和高可用性。
设计每日同步是一次痛苦。
在每次插入新出版物后
应用此“封底”测试-发生频率更高,这是新条目而不是数据的获取。可能是插入(和触发器)的成本超过了它的价值。
同样,在获得一些统计信息和经验之前,您无法做出这种判断,这可以通过“简单”方法获得。