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