读/写语义和对象语义的含义(简单地说)是什么?为什么下面的陈述是正确的?
借方/贷方写入银行账户,在读/写语义下被定义为冲突,而在对象语义下则不是。
发布于 2013-04-02 19:10:40
如果没有更多的上下文,我不确定这是否能回答这个问题。
第2.1-2节在以下PDF提供了一个概述。
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.48.4184&rep=rep1&type=pdf
以下是一些要点。
读/写
“用于读/写模型的两阶段锁定协议为每个对象维护两种类型的锁,即读锁和写锁。事务必须在读(写)锁之前获得读(写)锁,然后才能读取(写)数据对象。如果两个不同事务的锁都应用于同一个数据对象,并且至少其中一个是写锁,则来自不同事务的两个锁发生冲突。如果事务与该数据对象上的任何其他锁发生冲突,则事务无法获得该锁。”
所以,如果另一个人在写作,你就不能阅读;如果另一个人在阅读,你就不能阅读。但如果另一个人在读书,你就能读到。
对象
“对象维护状态并提供一组操作,作为事务访问和修改对象状态的唯一手段。……两个可交换操作可以同时执行,即使这两个操作都是更新操作。”
现在,您可以允许对操作顺序不重要的事情进行读/写。
他们接着解释了存款和取款是如何不通勤的(由于资金不足,可以拒绝提款),但两笔存款可以通勤。这两个存款将相互阻塞,必须在读/写下按顺序发生,但在对象语义下,它们可以同时发生。
发布于 2013-04-02 22:37:41
考虑到你把“(简单地说)”.我来试试这个。
首先,当将“值”或“数据”作为对象时,这个问题最有意义。这是在OODB中讨论数据的一种典型方法。因此,存储的银行帐户余额被称为“数据对象”,您可以获取一个锁来访问该值(读取、写入、删除它等)。
在这种情况下:读/写语义是“更改数据的意义”,我们可以在此基础上决定在锁定的事务中可以发生哪些读或写。相反,对象语义允许您以任何您认为合适的方式更改值,只要您持有相关的锁。
对于银行帐户,您需要锁定,这不允许在同一交易中同时发生借方和贷方(甚至多个借方,或多个贷方)(因此它们仍然被视为不同的操作)。这意味着您的读/写语义定义了冲突的多个贷项/借方。
例如,如果在单个事务的范围内,我将of 10记入银行帐户,并从银行帐户中借入of 7(即使用对象语义),则生成的银行报表将显示一个of 3的信用,而不是这两个单独的条目。
通过使用读/写语义定义锁定逻辑,可以确保事务不会以这种方式组合。
https://stackoverflow.com/questions/14261314
复制相似问题