Abbiamo un sistema in cui ai clienti viene assegnato un prodotto in base all'ordine di arrivo.Soluzione ottimale per un numero elevato di richieste su una tabella di database
La nostra tabella prodotti contiene una chiave primaria incremento che ha iniziato a zero che usiamo per tenere traccia di quanti prodotti sono stati assegnati ad esempio un utente si riserva un prodotto e viene assegnato 1, prossimo utente ottiene 2 ecc
Il problema è che potenzialmente centinaia di migliaia di utenti accederanno al sistema in qualsiasi ora. Tutti quelli che colpiranno questo tavolo unico.
Poiché è necessario garantire che a ogni cliente venga assegnato un solo prodotto e tenere traccia di quanti prodotti sono stati allocati, utilizziamo un blocco riga per ogni cliente che accede al sistema per assicurarsi che scriva sulla tabella prima del prossimo cliente colpisce il sistema, vale a dire applica la regola "primo arrivato primo servito".
Siamo preoccupati per il collo di bottiglia che è il tempo di elaborazione di ciascuna richiesta in entrata SQL Server 2008 Enterprise Edition e il blocco riga.
Non è possibile utilizzare più server poiché è necessario garantire l'integrità della chiave di accesso in modo che tutto ciò che richiede la replica non funzioni.
Qualcuno sa di buone soluzioni particolarmente efficienti nel gestire un numero elevato di richieste su una tabella di database?
Un po 'più informazioni: La tabella in questione contiene essenzialmente solo due campi: ID e ID cliente. La soluzione è per un omaggio gratuito di un milione di prodotti - da qui l'aspettativa di una forte domanda e perché utilizzare la chiave primaria incrementale come chiave ha senso per noi - una volta che la chiave raggiunge un milione, non è più possibile registrare clienti. Inoltre, i prodotti sono tutti diversi, quindi l'allocazione della chiave corretta è importante per es. i primi 100 clienti inseriti hanno ricevuto un prodotto di valore superiore rispetto ai successivi 100 ecc.
Grazie per qualsiasi aiuto.
Puoi re-taggare, includere [sqlserver] e puoi dirmi la versione e l'edizione, se modifichi la tua domanda e dicci di avere 'SQL2008 Enterprise Edition', ad esempio potremmo essere in grado di offrire soluzioni su misura per es. Il partizionamento delle tabelle è disponibile in SQL 2008 EE –
Grazie Jeremy. Aggiunte le informazioni aggiuntive. –
Prima domanda ovvia; hai rimosso tutto il resto dalla transazione che ottiene la chiave? Per esempio. sai prima di provare a ottenere la chiave tutto ciò che devi sapere, andare al tavolo a prendere la chiave e sbloccare prima di fare altre cose? – Karl