Yeah. Actually as far as I can tell you have two choices if you want
transaction consistency: use multiversion concurrency control, or use
locks. Locks have a *much* worse performance hit in the concurrent case,
and annoy developers more, but a lower hit in the single-threaded case.
It's a toss-up which to use :)
(Oracle moved to MVCC a while back, too, while keeping around a huge pile
of grot to try to mollify people who were used to locking everything and
messing around in horrible ways with 'rollback segments' and that crud.)