Mysql
 sql >> Database >  >> RDS >> Mysql

Bloccare un tavolo con l'ibernazione

È necessario utilizzare il blocco pessimistico, che può essere ottenuto tramite

setLockMode(String alias, LockMode lockMode) 

sulla query e utilizzare LockMode.UPGRADE .

Vedi Query.setLockMode

Tuttavia, questo ucciderà sicuramente la scalabilità e le prestazioni se si accede molto a questa tabella. È meglio usare una sequenza o un'altra strategia consiste nel creare un servizio per allocare i numeri (ad esempio, un SSB) che raccolga 100 numeri alla volta, aggiorni il database e li distribuisca. Ciò ti fa risparmiare 198 accessi al database.

AGGIORNAMENTO:

Dovrai anche modificare leggermente il design del tuo tavolo. È meglio avere una singola riga con un ID noto e memorizzare il numero che stai incrementando in un'altra colonna. Quindi dovresti aggiornare la riga anziché eliminare la vecchia riga e aggiungerne una nuova. In caso contrario, la strategia di blocco delle righe non funzionerà.

AGGIORNAMENTO2:

OP ha riscontrato che quanto segue ha funzionato:

session.get(class.Class, id, lockOption)