在逻辑和数据库设计与优化(PHP和MySQL)中,CMS和高流量网站(如新闻门户网站)之间是否有任何区别?
我在stackoverflow中搜索了php site scalability
,memcached占多数。
是否有MySQL优化技术? (我正在为这个问题寻找一本书。我在amazon进行了搜索,但我不知道什么是最好的选择。)
提前致谢
答案 0 :(得分:3)
这不容易回答。 有不同的方法和各种各样的意见,但不好尝试涵盖一些常见的情况。但首先是一些基础知识。
大多数Web应用程序都可以在应用程序和数据库中进行操作。 数据库使用可以分为事务(oltp)和分析(olap)
在最好的情况下,您可以启动许多应用程序服务器并在它们之间分配流量。它们都与同一个数据库服务器连接,可以独立工作。 如果您有其他共享数据,会话等,这可能会很困难。 你可以通过简单地在dns中为你的域名添加多个ip地址来实现这一点。 或者您使用负载平衡技术转发客户端执行不同的服务器。
应用程序扩展通常非常容易。数据库要复杂得多。
首先要做的是设置一个或多个复制服务器,它们与主数据库具有相同的数据。它们可以级联,但有一个缺点。他们的数据并不总是最新的。一般不超过几秒钟,但它可能更负载。但对于许多用例,这很好。 只显示信息的大型站点可以将他们的数据库复制到一些从属服务器,设置一些应用程序服务器(这是在同一服务器上运行一个从属服务器和一个应用程序服务器并让该应用程序服务器访问该数据库从属服务器的良好实践)很好。
每个olap查询都可以定向到从属。 olap querys是那些不修改任何内容并且不需要100%up 2日期数据的查询。
所以一切都需要写入同一个数据库源服务器,其他每个服务器都从中获取其副本。例如,文章的每条评论。
如果这个瓶颈太紧,你可以进入两个方向。
分片意味着您决定应用程序服务器存储位置以及获取数据的位置。 例如,每个以a开头的注释到达服务器a,b-> b等等。 这是一个愚蠢的例子,但它基本上是如何。主要涉及一些内部ID。 如果可能的话,它可以对数据进行分片,以便可以从该服务器agani中完全取出。 在上面的例子中,如果我想要一篇文章的所有评论,我将不得不问eveyr服务器a-z并合并结果。这是无效的,但可能,因为可以复制这些服务器。这称为映射(您可以检查着名的谷歌map-reduce算法,基本上就是这样)。
master-master repliation意味着您将数据写入不同的主服务器并且它们彼此同步,并且不会像分片一样单独存储。 如果您的应用程序无法自行决定存储和获取数据的位置,则必须执行此操作。 你只是存储到任何主服务器,每个服务器获取一切,每个人都很高兴? 不......因为这涉及另一个严重的问题。 冲突!想象两个用户输入评论。 commentA存储在serverA上,commentB存储在serverB上。我们应该使用哪个ID。哪一个先来? 最好的方法是设计一个避免这种情况并具有不同密钥和内容的应用程序。 但通常发生的是冲突解决,优先排序和东西。 oracle在这个级别上有很多功能,而mysql仍然落后。但是趋势正在变得更复杂的数据结构,比如云计算......
好吧,我不认为我解释得很好,但你至少应该从oyu可以进一步调查的文本中获得一些关键词。
答案 1 :(得分:1)
当然,您可以采取各种措施来优化高流量网站的PHP / MySQL Web应用程序。但是,大多数情况取决于您的具体情况,而您未在问题中提供这些情况。
无论您是否拥有高流量网站,您的数据库都应该结构合理。如果您使用现成的CMS,这通常很好。除了良好的应用程序架构外,没有一个通用的解决方案。