- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在我的第一个 php/Codeigniter 项目上工作,我在网上搜索了有关锁定对编辑数据的访问的信息,但没有找到太多信息。
我希望 2 个用户尝试同时编辑同一个表单是相当常见的事情。
我的经验(在 BBx、filePro 和其他 RAD 应用程序的有状态世界中)是使用悲观锁锁定正在编辑的数据——一个用户当时可以访问编辑表单。第二个用户基本上必须等待第一个用户完成。我知道这可以通过使用 Ajax 发送 XMLHttpRequests 来维护“锁定”数据库来完成。
缺乏状态的 php 世界似乎更喜欢乐观锁定。如果我理解正确的话,它是这样工作的:两个用户都可以访问数据,并且他们每个人都记录了数据的“更改前”版本。在保存更改之前,再次检索数据并与“更改前”版本进行比较。如果两个版本相同,则写入用户更改。如果它们不同;向用户显示自他/她开始编辑以来发生的更改,并添加一些机制来解决差异——或者向用户显示“抱歉,请重试”消息。
我对这里的任何人在实现悲观和乐观锁定方面的任何经验都很感兴趣。如果有任何可用的库、工具或“操作方法”,我将不胜感激。
谢谢
最佳答案
据我所知,CodeIgniter 不支持锁定行。如果你想实现乐观锁定,你应该添加一个版本列或时间戳列,你必须在每次更新/插入时更改。将版本列放入表单的隐藏字段中。然后在每次更新之前,添加一个 where 子句,例如:
$this->db->where('version',$editedVersion);
或
$this->db->where('timestamp',$editedTimestamp);
然后您应该检查更新是否正确更新了 1 行..
$this->db->where('id',$editedId);
$this->db->update('tablename',$data);
$rowsAffected = $this->db->affected_rows();
if ($rowsAffected == 0) {
/* Data changed by other user, update failed */
} else {
/* updated successfully */
}
关于php - 乐观锁和悲观锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2876323/
我正在编写一个 Web 应用程序,两个不同的用户可以在其中更新事物列表,例如待办事项列表。我已经意识到,乐观锁定机制效果最好,因为我不希望出现高争用情况。 我一直在查看事务隔离级别,现在我有点困惑。看
我是一名优秀的程序员,十分优秀!