【问题标题】:zend framework: wait for query to finish before starting anotherzend 框架:等待查询完成后再开始另一个
【发布时间】:2010-09-22 19:12:02
【问题描述】:

在我在 zend 框架中创建的 Web 应用程序中,我正在为每个注册的新客户端创建一个新数据库。这个查询当然是相当繁重和耗时的,因为我们需要创建一个数据库,创建大约 10 个表并将一些数据放入表中。

我们正在使用我们读入的一个大型 SQL 文件并执行 exec()。

在这些查询之后,在 ZF 中使用另一个 mysql 连接,我需要在上一步中创建的表之一中插入一条新记录。

这是失败的地方:当第一个查询尚未完成并且我尝试在正在创建的表中插入数据时,我收到错误“表 xxxx 不存在”。

所有这一切都在几分之一秒内发生,但我找不到“等待”第一个大型查询完成的方法。

在第二个语句之前放置一个 sleep(2) 命令解决了这个问题,但这并不是我们真正想要的方式。

此外,我们不能使用事务,因为我们正在使用 CREATE DATABASE 和其他不能用于事务的语句。

【问题讨论】:

    标签: php mysql zend-framework


    【解决方案1】:

    每个客户端一个数据库是一罐蠕虫,您几乎肯定希望在它失控之前将其消除。在每个表中使用带有 client_id 字段的单个数据库来指示记录属于哪个客户端。 (这意味着添加一个新表来保存客户记录本身。)

    【讨论】:

    • 我们已经考虑过这一点,我们需要为我们的客户提供单独的数据库,不仅作为额外的数据安全层,而且确保我们可以轻松地恢复每个用户的备份。跨度>
    • 我会支持这个评论,每个客户的新表听起来像是灾难的秘诀。话虽如此,说实话, sleep(2) 可能是你最好的选择。
    • 你能解释一下为什么每个客户端一个新数据库是灾难的根源吗?
    • 离题,但请查看 stackoverflow 播客,其中 FogBugz 也为每个客户端使用单独的数据库:[50:45] stackoverflow.fogbugz.com/default.asp?W24218
    • @Jorre 显然,这取决于场景。在此处的注释大小限制范围内工作,我可以说:执行基本维护要复杂得多,正如 OP 已经在该领域遇到问题的事实所证明的那样。您必须创建一个新数据库、创建表、创建索引、分配权限等,而不是仅通过插入一行来添加客户端。将来,您需要对架构进行的任何微小更改都会乘以您拥有的数据库数量。您也无法轻松汇总客户数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-04
    • 2020-04-14
    • 2023-03-09
    • 1970-01-01
    • 2013-06-15
    • 2023-03-17
    • 2016-08-17
    相关资源
    最近更新 更多