(只是一些无聊的理论,给自己看的,有错误希望指出,不喜勿喷)
java中,正常同步时读写是相互阻塞,但是想一想,如果数据一直读不写,数据没有变,互相阻塞的操作就不合理,于是就引出了java的读写锁。冷不丁的一看这和oracle的读写分离有点像,有点感觉,但是好像又不太一样,一个用redo与undo,一个用锁,实现方式根本就不一样,这是为啥嘞。
java的读写锁就是读与读之间不相互阻塞,读与写之间相互阻塞,写与写之间相互阻塞。
oracle的读写分离出现使得oracle在最早的一段时间成为老大,他的undo与redo日志实现了读写分离与数据回滚,保持数据一致性与安全。
java读写锁与oracle的读写分离实现方式为什么不太一样
java锁与oracle的读写分离实现的业务不同导致的
oracle的使用保持数据一致性的传统,读的是五点整开始查数据,因为计算机又或者数据量太大等原因,五点01数据才读完,但是业务上用户就想要查询五点的数据,所以oracle读写分离实现了五点零一返回了用户在五点钟查询到的数据,就算在五点与五点零一之间用户做了任何改动(夸张点说),返回的还是五点整这个时间点的数据。
所以oracle在五点零一得到的数据是五点整那一时刻的数据,而java的读写操作要求,读的数据时最后的数据,如果查询中途数据发生改变,也要返回改变的数据