代码之家  ›  专栏  ›  技术社区  ›  ae.

MySQL复制速度

  •  3
  • ae.  · 技术社区  · 15 年前

    假设我们在局域网上有3台服务器:

    应用程序 -PHP应用服务器

    主人 -主MySQL数据库服务器

    奴隶 -从MySQL DB服务器(复制主服务器)

    在一个代码块(PHP)中 应用程序 插入 主人 ,检索最后一个插入ID,然后使用该ID选择刚插入的数据 奴隶 .

    所以问题是,复制是否会在 奴隶 从中获取数据 主人 ?这是否受负载的影响 主人 奴隶 ?

    最后,如果可用数据存在问题,是否有方法确保从 奴隶 ?

    2 回复  |  直到 15 年前
        1
  •  5
  •   Aea    15 年前

    因为MySQL复制时间是一个不可控制的变量(即使在适当的实现中,也可能出现延迟复制或阻塞复制的问题),所以最好不要依赖数据复制。您可以将问题分为两种情况:

    1)我是进行CUD操作的用户,我希望R操作的后遗症能反映我刚才所做的更改。在这种情况下,您绝对需要从主数据中提取数据,因为用户希望他的更改会产生效果。

    2)我是一个外部用户,我不知道发生了CUD命令,通常我不在乎,所以返回过时的数据是可以接受的(在99%的实现中,否则您可能不会使用php*)。

    与1相比,另一种选择是通知用户他的更改正在传播,并且在某些情况下是可以接受的,例如许多网站会告诉您,X可能需要长达Y分钟才能出现,这就是实际情况。

    • 如果您需要即时更新,可以尝试写入一个缓存层,该缓存层与(可能不可靠的)DB数据一起被轮询。像memcached这样的东西将是一个主要的候选人。
        2
  •  0
  •   Tyler Carter    15 年前

    这取决于从服务器从主服务器复制数据的速度。

    如果它直接与insert、update和delete命令绑定,也就是说,当您插入某个内容时,实际上是在这两个命令上插入它,很可能两者都可以使用。

    如果从服务器通过一个经常运行以从主服务器获取数据的任务复制主服务器,这比每1个查询进行2个查询的成本更低,这意味着只有在任务运行之后,数据才可用。