This article is part of the [[Advanced User's Guide]].
The BaseX client-server architecture offers ACID safe transactions,
with multiple readers and
single writers. Here are some more
informations about the transaction management.
The concurrency control checks for each transaction, which will perform a read or write operation on the database , the status of the lock object and decides whether the isolation is guaranteed for that transaction or not . If the isolation can be guaranteed the transaction will be started immediately. Otherwise, the transaction enters a waiting queue and waits till the transaction monitor validates and starts the transaction. The transaction monitor starts either the next writing transaction or the next group of reading transactions (if there are any on the queue).
The transaction monitor ensures that just one writing transaction
is active at the same time. This seems to be an odd mechanism, but it is needed since the complexity of updates increased and it is possible now to access multiple databases in one XQuery Update query.<br /> To avoid starvation of any transaction and wrong execution orders the waiting queue works with the FIFO principle (' First-In First-Out' ), which states that the first process that arrives at the server will be the first one that will be executed. The FIFO principle cannot be adhered in a group of reading transactions, as they run in different threads and thus can overtake each other.<br/> The use of the monitor also prevents the system from deadlocks, because the critical resource is only assigned to one writing transaction resp. a group of reading transactions.