Sao usadas filas.
Cada compra cai em uma fila e vai sendo processada na sequência.
Enquanto isso, seu cliente fica em uma tela dizendo que o pedido está em processamento. Quando finaliza, ele recebe um e-mail avisando. Se a tela aijda estiver aberta, um socket avisa pra ela dizer que deu certo.
O importante é que nunca a requisição cai diretamente no banco. E, mesmo que tenha o lock, a requisição nunca ficará esperando ela finalizar.
O cliente clica em comprar e imediatamente vai pra página de processamento. Saca? Ele não fica com uma requisição esperando.
Pesquise sobre rabbitmq.
1