【问题标题】:concurrent mySql database queries并发 mySql 数据库查询
【发布时间】:2010-02-07 14:50:59
【问题描述】:

我正在运行每 4 小时更新一次的 mySql 服务器。 同时可以检索数据。

mySql 是否处理这种正在更新数据库的场景 并收到用户的查询?

或者我应该处理这种情况? 是否可以在更新发生之前创建数据库的快照 并查询这个数据库?

谢谢

【问题讨论】:

    标签: mysql concurrency


    【解决方案1】:

    如果您担心并发写入的处理方式,那是一回事,但您可以安全地从另一个线程正在更新的 MySQL 数据库中读取数据,而不必担心数据损坏。

    当然,如果写入线程正在执行需要原子的多次写入(即全部或无),请确保他正在使用事务。

    【讨论】:

    • 只有 1 个写作线程可用,每 4 小时发生一次。写入线程从数据库中提取所有记录。对于每条记录:它执行一些任务并使用新接收到的数据更新记录。因此,有可能正在更新记录 i 并且拥有记录 i 的用户试图从中获取数据。所以我会阅读更多关于交易的内容。是否可以在 PHP 中分离的线程之间拆分工作?我的意思是每条记录的任务大约需要 10 秒,而对于表演问题,我认为是分开工作。
    • "所以有可能记录 i 正在更新,并且拥有记录 i 的用户试图从中获取数据。" - 这不应该给你带来任何问题。假设您使用事务来写入数据,用户将在更新之前或之后查看数据库视图,具体取决于接收查询的顺序。如果读取后写入,您不能告诉数据库在写入完成之前推迟读取,但您不需要这样做,因为用户正在获取数据的有效视图。跨度>
    • Re: PHP 线程,没有这样的东西。您将需要分叉多个进程。有关示例,请参见 alternateinterior.com/2007/05/…。
    • 所以我应该将所有作品合并到 1 笔交易中?如果读取发生在写入事务之前,那么用户将获得最新数据。另一方面,如果读取发生在写入事务之后,用户可以从数据库中获取数据,或者数据库被锁定直到写入事务完成?另一个问题是写入事务可能需要一些时间,比如说我更新了记录,但仍然通过使用事务,用户不会获得更新的数据。我该如何处理?
    【解决方案2】:

    您可以使用事务和/或锁定来确保每个用户看到一致的视图(即完全更新或根本不更新)。数据库引擎本身非常适合该场景。如果您不担心读者在更新运行的确切时间看到什么,则无需执行任何操作。

    【讨论】:

      【解决方案3】:

      考虑到我的情况,我认为无需采取进一步行动。 如果写入发生在读取之前,用户将获得最新的数据 否则没有,他会等待下一个查询。

      这符合我的要求。

      谢谢大家

      【讨论】:

      • 如果任何已发布的对此主题的答案帮助您得出结论,通常赞成和/或接受它们是礼貌的。这也有助于其他读者找到有用的信息。
      猜你喜欢
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多