Sobes.tech
Junior — Middle

Quali approcci e metodi utilizzerai per eliminare la concorrenza quando due utenti accedono contemporaneamente al database?

sobes.tech AI

Risposta dell'AI

Per evitare la concorrenza quando due utenti accedono contemporaneamente al database, vengono adottati i seguenti approcci:

  1. Transazioni e blocchi — utilizzo di transazioni con un livello di isolamento adeguato al compito (ad esempio, Serializable, Repeatable Read). Questo aiuta a evitare conflitti durante la lettura e la scrittura dei dati.

  2. Blocco ottimistico — durante l'aggiornamento dei dati, si verifica se sono cambiati dall'ultima lettura (ad esempio, tramite un campo di versione). Se sono cambiati, l'operazione viene annullata o ripetuta.

  3. Blocco pessimista — blocco esplicito di righe o tabelle durante l'operazione, per impedire ad altri utenti di modificare i dati.

  4. Utilizzo di operazioni atomiche — ad esempio, in alcuni DBMS, si possono usare comandi che garantiscono l'atomicità dell'aggiornamento.

  5. Code e serializzazione delle richieste — se le operazioni sono critiche, si può organizzare una coda di richieste per modificare i dati.

Esempio con transazioni in Python usando la libreria psycopg2 per PostgreSQL:

import psycopg2

conn = psycopg2.connect(...)
try:
    with conn:
        with conn.cursor() as cur:
            cur.execute("BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;")
            cur.execute("SELECT balance FROM accounts WHERE id = %s FOR UPDATE;", (account_id,))
            balance = cur.fetchone()[0]
            new_balance = balance - amount
            cur.execute("UPDATE accounts SET balance = %s WHERE id = %s;", (new_balance, account_id))
    # La transazione viene automaticamente confermata
except Exception as e:
    conn.rollback()
    print("Errore nell'aggiornamento del saldo:", e)
Quali approcci e metodi utilizzerai per eliminare la… - sobes.tech