  The optimistic variants of MVCC (Multi-Version Concurrency Control) avoid
blocking concurrent transactions at the cost of having a validation phase. Upon
failure in the validation phase, the transaction is usually aborted and
restarted from scratch. The "abort and restart" approach becomes a performance
bottleneck for the use cases with high contention objects or long running
transactions. In addition, restarting from scratch creates a negative feedback
loop in the system, because the system incurs additional overhead that may
create even further conflicts.
  In this paper, we propose a novel approach for conflict resolution in MVCC
for in-memory databases. This low overhead approach summarizes the transaction
programs in the form of a dependency graph. The dependency graph also contains
the constructs used in the validation phase of the MVCC algorithm. Then, in the
case of encountering conflicts among transactions, the conflict locations in
the program are quickly detected, and the conflicting transactions are
partially re-executed. This approach maximizes the reuse of the computations
done in the initial execution round, and increases the transaction processing
throughput.
