To achieve long running batch updates, a transaction aggregator layer and one or more data aggregation queues, such as a command queue, are placed between one or more clients and a database. Writes go to the database aggregator layer and are enqueued in the appropriate data aggregation queue, which may be allocated by transaction. Committing the transaction drains the queue and writes the contents of the queue in one transaction-like update to the database. By using the transaction logic in the transaction aggregator layer, transaction-like behavior may be achieved that allows both updates and transactions to scale with less impact on database servers.