在一次面试中,我被问到一个用例,面试官问:
假设你有一个银行账户,你正在网上购物你哥哥有你的ATM卡,他正准备进行交易你父亲去银行开了一张取款支票。所有这3笔交易同时发生。
如何管理这些交易,使余额不被透支?
我:我说过我会在账户余额对象上使用同步
面试官:不满意。下一个问题。
有人能解释一下答案是什么吗?数据库锁或事务隔离会是更好的方法吗?
我是JAVA初学者,所以请原谅我的天真。
并发控制是数据库管理系统(DBMS)的概念,用于解决多用户系统中可能发生的同时访问或更改数据的冲突。并发控制应用于DBMS时,旨在协调同时进行的事务,同时保持数据完整性。1并发即将控制数据库的多用户访问
基本时间戳是一种消除死锁的并发控制机制。这种方法不使用锁来控制并发,因此不可能发生死锁。根据这种方法,每个事务都会分配一个唯一的时间戳,通常显示它的启动时间。这有效地允许为事务分配一个年龄和分配一个订单。数据项同时具有读取时间戳和写入时间戳。每次读取或更新数据项时,这些时间戳都会分别更新。
当一个事务试图读取一个被较年轻的事务写入的数据项时,这个系统就会出现问题。这称为延迟读取。这意味着数据项自初始事务开始时间以来已经发生了变化,解决方案是回滚时间戳并获取一个新的。当一个事务试图写入一个被较年轻的事务读取的数据项时,就会出现另一个问题。这称为延迟写入。这意味着该数据项自改变它的事务开始时间以来已经被另一个事务读取。这个问题的解决方案与延迟读取问题的解决方案相同。必须回滚时间戳并获取新的时间戳。
遵守基本时间戳过程的规则允许事务被序列化,然后可以创建事务的时间安排。在事务级别较高的大型数据库中,时间戳可能不切实际。在这些情况下,必须专用大量存储空间来存储时间戳。
来源:-http://databasemanagement.wikia.com/wiki/Concurrency_Control
通常,当您启动一个项目时,必须处理某种行为。事务隔离就是其中之一,因此我会在这种情况下评估最合适的事务级别。要了解更多信息,我建议您阅读有关视图序列化的信息。这是这样做的方式之一。