如何为php / mysql中的简单新闻提要设计有效的体系结构?

时间:2019-05-28 17:00:44

标签: php mysql web optimization architecture

简而言之: 在考虑为大型受众网站制作简单新闻提要的最佳方法的同时,我给出了两种解决方案。我将介绍这两种解决方案,但最重要的是,我将它们发布在这里,以便对它们有最多的意见,并且主要是想知道您是否有更好的方法来进行设置。 因此,我非常欢迎所有反馈/建议。

详细信息:

在数据库中,有3个表:用户作者图书。用户可以订阅作者,而作者正在写书。这就是它的样子。

db_architecture_1

所需要的是一个简单的新闻提要:向用户显示他们所订阅的作者出版的最新书籍的列表。像这样: *

  • Author45写了一本新书:Book756Title
  • Author12写了一本新书:Book45Title
  • 作者76写了一本新书:Book28Title
  • ...

*

解决方案:

  • 我想到的第一个解决方案是: 加载新闻时,只需进行简单的SELECT,即可在发布日期之前将所有相关表和订单连接起来。

    问题在于,尽管它是最简单,最快的解决方案,但我一直不停地想着这是一个非常繁重的查询,当被大量受众执行时,它将对很多应用程序性能产生很大影响。

  • 然后是第二个解决方案,需要更多解释:

对于网站系统,有2台服务器:公共服务器和公共服务器,公共服务器使用主数据库托管公共网站,第二台服务器具有备份/更新数据库。第二台服务器不可公开访问,但是两台服务器每天都同步。

因此,所有新的作者和书籍插入都是在此插入的,而用户的抄写和所有用户的活动都是在公共服务器上完成的。

所以我找到了第二个解决方案,就性能而言,最好的解决方案是添加一个新表 Notification ,并在 Publication 表上设置mysql触发器。插入每个新发布后,触发器将选择所有订阅作者的用户,并在通知表上向其插入新条目。

这样,公共服务器上剩下的唯一任务就是选择用户的新通知并显示它们。

我已经对该触发器的1万用户进行了测试,我认为mysql的反应非常快。


所以现在,即使第二个解决方案是获胜者,我还是向你们展示了这两种方法,以便对这个优化问题有最大的见解。

谢谢大家阅读并等待答案。

1 个答案:

答案 0 :(得分:0)

每个表中有几行?如果不到一百万,我认为较简单的(第一个)解决方案没有问题。

-那是我的“观点”和“经验”。

此外,我建议使用更简单的提案进行统计。然后,与任何大型项目一样,计划要在几个月后重新考虑该决定。您可能会发现简单的解决方案“足够好”。或者,您可能会发现一个简单的修复程序,使其足够好。或者,您可以选择对其进行修改-包括重新设计架构,UI和所有内容。

-再次,我来自“观点”和“经验”两个方面。

  

两个服务器都每天同步

不。使用复制可以使它们始终保持同步。或使用群集技术(例如Galera)为您提供备份和高可用性。

设计每日同步是一次痛苦。

  

在每次插入新出版物后

应用此“封底”测试-发生频率更高,这是新条目而不是数据的获取。可能是插入(和触发器)的成本超过了它的价值。

同样,在获得一些统计信息和经验之前,您无法做出这种判断,这可以通过“简单”方法获得。