I'm familiar with Database transactions, and spent lots of timing tuning isolation levels. I have never implemented my own transactional model in code.
I've read through the source code for the Clojure transaction implementation - and am trying to understand the model behind it.
I'm reading through a description of a Software Transactional Memory in hardware implementation, and it prompted me to think there must be 'categories' of transactional model.
My question is: What category of Transactional Model does the Clojure STM fall into?
Mark Volkmann's article about Clojure's STM is an amazing source of information on the subject – I highly recommend that you give it a read if you're interested in the topic, whether you're after a high-level design overview or a description of low-level implementation details.
To summarize, Clojure's STM's transaction model is based on MVCC and snapshot isolation. It has certain peculiar features (for example the way in which it interacts with threads), but on the whole this description should give you the right idea.