0

假设我有一个 Web 应用程序(在服务器端使用 Django),并且我希望其中一个用户(类似管理员的用户"A")能够加载某个视图(网页),她可以在其中修改数据库表将阻止其他用户访问数据库(以及与修改数据库相关的视图),直到用户A完成(按下页面上的某个按钮)。我正在使用 MySQL 和 SQLite(用于开发)。这是我的问题。

  1. MySQL 锁定表机制在 MySQL 服务器级别而不是 Web 服务器级别上工作。由于应用服务器 (Django) 端只有一个 MySQL 用户与 MySQL 服务器关联(即所有应用程序用户在 MySQL 端都将具有相同的用户),因此该机制在这里无关紧要。我对么?

  2. 如果 1. 以上是正确的,那么创建这样一个锁的正确方法是什么?好吧,可以创建一个单独的表“lock_table”,它只有一个布尔条目,每个视图都会轮询它,如果它被设置 - 重定向到“db临时锁定”视图。但是,我不确定这是一个好方法。如果您知道,请告知如何实施它。

谢谢。

4

2 回答 2

1

选择二将是一个不错的选择。另一种选择是在您的 django 数据库中定义一个“虚拟第二个数据库”,并使用该数据库执行锁定查询。有关详细信息,请参见此处

于 2014-04-20T17:51:14.407 回答
1
  1. 你是对的。您不能在 MySQL 级别上设置系统来锁定表,因为每个数据库查询都将由同一个 MySQL 用户进行。

  2. 正确的方法是使用 memcached 或其他缓存系统在缓存中设置一个锁,然后检查这些视图的装饰器中是否存在这样的锁。

于 2014-04-20T17:10:38.277 回答