CMS 和高流量网站:PHP 和 MySQL

The*_*one 3 php mysql performance scalability

CMS和高流量网站(如新闻门户)在逻辑和数据库设计和优化(PHP和MySQL)方面有什么区别吗?php site scalability我在stackoverflow上搜索过, memcached占大多数。有没有MySQL优化的技术?(我正在寻找有关此问题的书。我在亚马逊搜索过,但我不知道什么是最好的选择。)提前致谢

The*_*can 5

这不太容易回答。有不同的方法和不同的观点,但我会尽力涵盖一些常见的场景。但首先是一些基础知识。

大多数Web应用程序可以分为应用程序和数据库。数据库使用可分为事务性 (oltp) 和分析性 (olap)

在最好的情况下,您可以启动多个应用程序服务器并在它们之间分配流量。它们都连接到同一数据库服务器并且可以独立工作。然而,如果您有其他共享数据、会话等,这可能会很困难。您可以通过简单地将多个 IP 地址添加到 dns 中的域名来完成此操作。或者您使用负载平衡技术将客户端转发到不同的服务器。

应用程序扩展通常非常容易。数据库要复杂得多。

首先要做的通常是设置一个或多个与主数据库具有相同数据的复制服务器。它们可以级​​联,但有一个严重的缺点。他们的数据并不总是最新的。一般来说,不会超过几秒钟,但在负载下可能会更多。但对于许多用例来说这很好。仅显示信息的大型站点可以将其数据库复制到某些从属服务器,设置一些应用程序服务器(最好的做法是在同一台服务器上运行一个从属服务器和一个应用程序服务器,并让该应用程序服务器访问该数据库从属服务器)很好。

每个 olap 查询都可以定向到从属设备。olap 查询是那些不修改任何内容并且不需要 100% up 2 日期数据的查询。

因此,所有内容都需要写入同一数据库源服务器,所有其他服务器都从该服务器获取其副本。例如一篇文章的每条评论。

如果这个瓶颈变得太紧,你可以朝两个方向发展。

  1. 分片
  2. 主主复制

分片意味着您决定应用程序服务器在何处存储以及在何处获取数据。例如,每个以 a 开头的评论都会到达服务器 a、b-> b 等等。这是一个愚蠢的例子,但基本上就是这样。主要涉及一些内部ID。如果可能的话,最好对数据进行分片,以便可以完全从该服务器中提取数据。在上面的示例中,如果我想获得一篇文章的所有评论,我必须询问每个服务器 az 并合并结果。这是低效但可行的,因为这些服务器可以被复制。这称为映射(您可以检查著名的谷歌地图缩减算法,它基本上就是这样做的)。

主-主复制意味着您将数据写入不同的主服务器,并且它们相互同步,并且不会像进行分片那样单独存储。如果您的应用程序无法自行决定在何处存储和获取数据,则必须执行此操作。您只需存储到任何主服务器,每个服务器都会获得所有内容并且每个人都满意?不……因为这涉及到另一个严重的问题。冲突!想象两个用户输入评论。commentA 存储在 serverA 上,commentB 存储在 serverB 上。我们应该使用哪个 id。哪一个先出现?最好的方法是设计一个应用程序来避免这种情况并具有不同的键和内容。但通常发生的是解决冲突、确定优先顺序等等。oracle在这个级别上有很多功能,而mysql仍然落后。但趋势正在进入更复杂的数据结构,比如云……

好吧,我认为我解释得不好,但你至少应该从文本中得到一些关键字,以便奥尤可以进一步调查。