EnterpriseDB provides a rich set of tools
for developers to manage concurrent access to data. Internally,
data consistency is maintained by using a multiversion
model (Multiversion Concurrency Control, MVCC).
This means that while querying a database each transaction sees
a snapshot of data (a database version)
as it was some
time ago, regardless of the current state of the underlying data.
This protects the transaction from viewing inconsistent data that
could be caused by (other) concurrent transaction updates on the same
data rows, providing transaction isolation
for each database session. MVCC, by eschewing
explicit locking methodologies of traditional database systems,
minimizes lock contention in order to allow for reasonable
performance in multiuser environments.
The main advantage to using the MVCC model of
concurrency control rather than locking is that in
MVCC locks acquired for querying (reading) data
do not conflict with locks acquired for writing data, and so
reading never blocks writing and writing never blocks reading.
Table- and row-level locking facilities are also available in
EnterpriseDB for applications that cannot
adapt easily to MVCC behavior. However, proper
use of MVCC will generally provide better
performance than locks. In addition, application-defined advisory
locks provide a mechanism for acquiring locks that are not tied
to a single transaction.