2010-07-31 50 views
0

如果我有一个为我的Web应用程序的用户读取和写入信息的database.php类(singleton),当调用同一个数据库函数的同时请求时会发生什么?Singleton database.php

数据库类可能会将错误信息返回给同时访问相同函数的其他用户吗?

还可能发生其他类似的问题?

回答

4

当同时调用同一个数据库函数的请求被调用时会发生什么?数据库类可能会将错误的信息返回给同时访问相同函数的其他用户吗?

绝对不是。

每个PHP请求都完全在它自己的进程空间中处理。没有线程,没有应用程序服务器连接池,没有共享内存,没有像这样的时髦。除非你不这样做(如在APC/memcached中缓存事物),否则什么都不共享。

每次应用程序启动时,您的Singleton将被创建。当请求结束时,脚本也一样。当脚本退出时,所有的变量,包括你的Singleton,都会消失。

还可能发生其他类似的问题?

除非您正在使用事务(如果您使用的是MySQL,则使用像InnoDB这样的事务安全表类型),否则用户可能会看到部分更新。例如,假设您需要对三个表执行更新以正确更新一组数据。在第一次更新完成之后但在其他两个完成之前,可能有另一个进程前来请求三个表中的数据并获取现在不一致的数据。这是race condition的一种形式。

+1

换句话说,单身人士并没有帮助ACID – Gordon 2010-07-31 23:07:59