我正在开展一个项目,该项目将由我所在组织的约500名员工使用。目前,它仍处于开发阶段,很少有人(大约10人)正在使用它。我正在使用MySQL。我只是想知道,如果许多用户正在进行前端编辑然后在同一时间点保存会发生什么?我写的一些SELECT查询确实需要6秒才能执行。由于在任何时间点只能执行一个查询,如果已经有查询正在进行,而另一个查询正在进行数据库检查,那么它是否会产生问题?如果这是大型项目中的常见情况,请告诉我如何处理这个问题。我不确定,如果我已经清楚了:)任何建议或链接将非常有帮助。
答案 0 :(得分:3)
从技术方面来说,没有 - 没有什么不好的事情会发生,数据库不会弹道而且会死在你身上,他们的目的就是并发访问。
从逻辑的角度来看 - 会发生一些不好的事情。如果两个人同时编辑同一个东西,然后同时发布它 - 它会一个接一个地保存到硬盘驱动器中。保存的最后一个是其更新将在HDD上的那个,有效地导致第一个人丢失他们的更改。
您可以从多个角度处理此问题。有些项目引入了锁定的概念(不是表锁定,而是应用程序内锁定)。它围绕使用布尔列将记录标记为锁定,如果有人试图访问该记录进行更新,则该软件会说其他人正在编辑它。它实际上很难实现,并且在大多数时候它没有按预期工作(我想我依旧记得Joomla!使用类似的东西,这是有史以来最烦人的功能之一。)
您拥有的另一个选项是将每个更新保存为修订版。通过这种方式,您可以跟踪谁更新了什么以及何时更新,如果被覆盖,您永远不会丢失任何记录。我相信SO和维基百科都使用这种方法而且效果非常好,因为你可以检查两个或更多人做了什么并合并他们的贡献。
答案 1 :(得分:2)
乐观并发控制 http://en.wikipedia.org/wiki/Optimistic_concurrency_control
确保每条记录包含上次更改/修改时间的日期元数据,并将其作为数据对象的一部分加载。然后,当尝试将行提交到数据库时,请检查表中的last_modified时间,以确保它是存储在对象内存中的SAME。如果匹配,则提交它,否则抛出异常。