![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
The Design Specifications for MVCC Support in Ingres is available for review at 'MVCC - Ingres Community Wiki' (http://community.ingres.com/wiki/MVCC) |
#3
| |||
| |||
|
|
On Mon, Oct 26, 2009 at 5:05 PM, Ingres Forums info-ingres (AT) kettleriverconsulting (DOT) com> wrote: The Design Specifications for MVCC Support in Ingres is available for review at 'MVCC - Ingres Community Wiki' (http://community.ingres.com/wiki/MVCC) It's nice to see such a fairly detailed specification. However, with very few exceptions, the architecture of this is almost identical to Oracle's MVCC design and implementation for acquiring a CR version of a block, which is heavily patented for not only a single-server software architecture, but also multi-server clustered architectures as well. For example, 4.1.9.1 lists CR buffers as being linked from the current version. While this is a seemingly obvious implementation for all chained hash table-based DB buffer management implementations, it is no different for Oracle. In Oracle, all versions of a buffer similarly hash to the same bucket, and all are chained to the current version. Likewise, the process listed in 4.1.9.4 is quite close to Oracle's implementation in that they determine whether a CR version needs to be created (by comparison of the SCN [similar to the comparison against crib_low_lsn]), and perform iterative UNDO on that block accordingly. While the high-level design is similar, in addition to the coarse-grained block-level UNDO, Oracle can also follow a single tuple back through multiple versions, which I don't see any conflict with here. Both Oracle and SQL Server now support Postgres-like tuple-based MVCC for various things, and both are using a fairly basic multi-version timestamp ordering (MVTO) algorithm. Oracle's buffer manager still relies on UNDO-based MVRC, but they use MVTO (rowscn) in a few other areas. In my experience, UNDO-based MVRC is much more preferable to MVTO from both a performance and manageability standpoint. It's just that Oracle has quite a few patents on optimized MVRC designs whereas MVTO is so blatantly obvious that it's an easy choice to make from a legality standpoint. Though, I'd be happy to see Ingres get MVRC. Regardless, I just wanted to make sure you guys are aware of the striking similarities in the design, especially having referenced Oracle's own documentation in the DDS. The only other system I know of which performed a similar UNDO-to-reach-a-CR-version-of-the-block (albeit a little different than Oracle's traditional method) is InnoDB, which of course is now Oracle's IP as well. I'm not sure whether Oracle's patent policy has changed, but I believe they have 3-6 fairly detailed patents for their MVCC implementation. |
#4
| |||
| |||
|
|
Jonah, this is interesting stuff that deserves to be widely discussed, and a newsgroup is a fine place to do it, but I doubt very many people are going to take the time I just took to look up some of the acronyms. Any chance you could post a more easily comprehended version? |
#5
| |||
| |||
|
#6
| |||
| |||
|
#7
| |||
| |||
|
#8
| |||
| |||
|
|
Would you know how EnterpriseDB protect themselves from Larry lawyers, because EnterpriseDB's Advanced Server Oracle compatibility is a blatant rip-off, If you ask me?! |
![]() |
| Thread Tools | |
| Display Modes | |
| |