A method for managing database transactions in a distributed database system (102, 202) including a plurality of nodes (108, 108a-c), the method including: maintaining, at a first node of the plurality of nodes (108, 108a-c), a first plurality of records of transactions in the system, each record in the first plurality of records being associated with a transaction and including a start time of the transaction and a start time of the oldest transaction that was active at the start time of the transaction, one of the records in the first plurality of records being a record of the oldest currently active transaction in the system; maintaining, at a second node (108a, 108c) of the plurality of nodes (108, 108a-c), a second plurality of records of transactions, the second plurality of records including records of completed transactions associated with the second node (108a, 108c), each record in the second plurality of records including a transaction start time and a transaction end time; receiving at the second node (108a, 108c), a message from the first node including a start time of the oldest transaction that was active at the transaction start time of the oldest currently active transaction in the system; removing, from the second plurality of records, any records of completed transactions with a transaction end time occurring before the start time of the oldest transaction; receiving, at the second node (108a, 108c), a first transaction for accessing a data element associated with the second node (108a, 108c); maintaining, at the second node (108a, 108c), a third plurality of records including records of active transactions at the second node (108a, 108c); and determining whether the first transaction is allowed to access a version of the data element of a plurality of versions of the data element based on one or both of the second plurality of records and the third plurality of records. maintaining, at a first node of the plurality of nodes (108, 108a-c), a first plurality of records of transactions in the system, each record in the first plurality of records being associated with a transaction and including a start time of the transaction and a start time of the oldest transaction that was active at the start time of the transaction, one of the records in the first plurality of records being a record of the oldest currently active transaction in the system; maintaining, at a second node (108a, 108c) of the plurality of nodes (108, 108a-c), a second plurality of records of transactions, the second plurality of records including records of completed transactions associated with the second node (108a, 108c), each record in the second plurality of records including a transaction start time and a transaction end time; receiving at the second node (108a, 108c), a message from the first node including a start time of the oldest transaction that was active at the transaction start time of the oldest currently active transaction in the system; removing, from the second plurality of records, any records of completed transactions with a transaction end time occurring before the start time of the oldest transaction; receiving, at the second node (108a, 108c), a first transaction for accessing a data element associated with the second node (108a, 108c); maintaining, at the second node (108a, 108c), a third plurality of records including records of active transactions at the second node (108a, 108c); and determining whether the first transaction is allowed to access a version of the data element of a plurality of versions of the data element based on one or both of the second plurality of records and the third plurality of records.