A computer implemented method comprising: receiving at least a first group of transaction logs from a first database at a second database ; dispatching the transaction logs in the first group to a plurality of replay queues (1331, 1332, 1333; 1510, 1520, 1530); after determining that the dispatching of the first group of transaction logs is complete, generating an end-of-group transaction log indicative of an end of the first group of transaction logs and allocating the end-of-group transaction log to each of the plurality of replay queues (1331, 1332, 1333; 1510, 1520, 1530); group-wise parallel replaying at the second database the transaction logs from each of the plurality of replay queues including the end-of-group transaction logs allocated to each of the plurality of replay queues (1331, 1332, 1333; 1510, 1520, 1530), updating a system timestamp (GCT) at an end of each respective group of transaction logs after each end-of-group transaction log has been replayed from each queue (1331, 1332, 1333; 1510, 1520, 1530) to match the lower of (i) a lowest pre-commit timestamp associated with any transaction for which an associated commit log has not been replayed; and (ii) the largest commit timestamp associated with any transaction for which an associated commit log has been replayed; receiving a query at the second database and assigning a snapshot identification to the query , wherein the snapshot identification is associated with the current system timestamp(GCT); and returning, in response to the query , only visible database records, wherein visible database records have an associated commit timestamp less than or equal to the snapshot identification. receiving at least a first group of transaction logs from a first database at a second database ; dispatching the transaction logs in the first group to a plurality of replay queues (1331, 1332, 1333; 1510, 1520, 1530); after determining that the dispatching of the first group of transaction logs is complete, generating an end-of-group transaction log indicative of an end of the first group of transaction logs and allocating the end-of-group transaction log to each of the plurality of replay queues (1331, 1332, 1333; 1510, 1520, 1530); group-wise parallel replaying at the second database the transaction logs from each of the plurality of replay queues including the end-of-group transaction logs allocated to each of the plurality of replay queues (1331, 1332, 1333; 1510, 1520, 1530), updating a system timestamp (GCT) at an end of each respective group of transaction logs after each end-of-group transaction log has been replayed from each queue (1331, 1332, 1333; 1510, 1520, 1530) to match the lower of (i) a lowest pre-commit timestamp associated with any transaction for which an associated commit log has not been replayed; and (ii) the largest commit timestamp associated with any transaction for which an associated commit log has been replayed; receiving a query at the second database and assigning a snapshot identification to the query , wherein the snapshot identification is associated with the current system timestamp(GCT); and returning, in response to the query , only visible database records, wherein visible database records have an associated commit timestamp less than or equal to the snapshot identification. <EOS>