Non ho mai lavorato con il partizionamento di SQL Server, ma attualmente mi trovo ad affrontare la progettazione di un database per il quale probabilmente i volumi lo giustificano. Il sistema è per coupon. I coupon devono essere emessi periodicamente, di solito ogni sei settimane anche se ci sarà anche un'emissione ad hoc, ad esempio per un evento speciale. Ci sono 15 milioni di clienti e per ogni evento di emissione, ogni cliente riceverà 6 diversi tipi di coupon, per un totale di 90 milioni di istanze di coupon. Dobbiamo tenere traccia dei dati di riscatto dell'istanza del coupon e mantenerli per 6 mesi, sebbene in genere un coupon sia valido solo per sei settimane. Qualsiasi richiesta di rimborso per un coupon non valido non raggiungerà il database poiché sarà convalidato dal POS fino al.
Per un periodo di sei mesi dovremo archiviare fino a 360 milioni di righe nella tabella Istanza coupon e fino a 72 milioni (presupponendo un tasso di rimborso massimo del 20%) nella tabella di rimborso. Ho la sensazione che questi numeri siano troppo grandi per una singola partizione?
La mia domanda è: cosa usare come chiave di partizione? Un candidato ovvio sarebbe per evento di emissione, dando circa 6 partizioni. Ma poi penso che forse anche questo darebbe una dimensione della partizione troppo grande per consentire prestazioni ottimali? Sarebbe possibile partizionare con due chiavi, ad es. Per evento di emissione + ultima cifra dell'ID cliente? Quindi la logica sarebbe:
If issuance event = 1 and last digit of customer id < 5 then
Store in partition 1
Else if issuance event = 1 and last digit of customer id >4 then
Store in partition 2
Else if issuance event =2 and last digit of customer id <5 then
Store in partition 3
Else if issuance event =2 and last digit of customer id >4 then
Store in partition 4
Etc...
Inoltre, non sono sicuro delle specifiche del server di database di cui avremo bisogno. Saranno sufficienti 16 GB e 8 PC? Il db deve essere in grado di restituire un risultato dalla tabella dell'istanza del coupon, digitata su un valore di codice a barre numerico in meno di mezzo secondo. La richiesta di transazione prevista per convalidare (selezionare) e riscattare (inserire) dovrebbe raggiungere il picco a circa 3.500 al minuto.
Il server db a 64 bit di SQL Server 2008r2 verrà eseguito il provisioning come VM da un host molto potente con accesso a una SAN ad alte prestazioni e di grande capacità.
Sarei molto grato per qualsiasi consiglio da parte di coloro che hanno implementato una soluzione SQL Server per gestire volumi simili.
Saluti
Rapinare.