So che Shopify usa un solo database per tutti i negozi. Ma come possono gestire il loro database con dati così grandi? È una buona idea utilizzare un unico database per oltre 50.000 negozi?
So che Shopify usa un solo database per tutti i negozi. Ma come possono gestire il loro database con dati così grandi? È una buona idea utilizzare un unico database per oltre 50.000 negozi?
Risposte:
Nota: sto rispondendo dal punto di vista di SQL Server, quindi menziono alcuni concetti specifici di SQL Server, ma credo che tutti questi concetti abbiano equivalenti in altre principali piattaforme RDBMS, con vantaggi e limitazioni simili.
Probabilmente continuerò anche a modificare questa risposta mentre penso ad altri potenziali vantaggi / svantaggi.
Bene, dipende davvero dallo schema, dal volume, ecc. Cosa memorizza esattamente un negozio? In che cosa differisce dalla memorizzazione di dati su circa 50.000 gatti o 50.000 prodotti o 50.000 noci?
Esistono diversi motivi (oltre all'aspetto di per sé) per cui potresti non voler archiviare i dati per 50.000 clienti diversi in un unico database, se in effetti i dati possono essere completamente separati dal cliente (ad esclusione di tabelle di ricerca come codici postali o tabelle specifiche dell'applicazione, che potrebbero andare in un unico database centrale):
se un cliente supera l'applicazione, non esiste un modo semplice per estrarre solo i propri dati e spostarli in un'altra istanza, server, ecc. per ridimensionarli, a meno che non si pianifichi in anticipo e si divida su qualcosa di simile CustomerID
e si disponga di 50.000 filegroup (si è limitati a 15.000 partizioni comunque, o 1.000 se si utilizza una versione precedente di SQL Server e avere troppi filegroup può essere disastroso ). Si noti inoltre che il partizionamento richiede Enterprise Edition.
se si scopre che tutti i tuoi clienti sono semplicemente troppo grandi per questa istanza, ridimensionare significa ottenere nuovo hardware e spostare l'intero database lì (e potenzialmente farlo di nuovo lungo la strada).
l'eliminazione di un cliente può essere ugualmente dolorosa, poiché dovrai eliminare una parte del% di righe da tabelle molto grandi e ciò non sarà economico.
probabilmente avrai un'ampia distribuzione dei dati dei clienti (un cliente con un miliardo di righe, un altro cliente con 5.000). Questo può portare a cose come lo sniffing dei parametri e le prestazioni dannose che coinvolgono cardinalità e qualità del piano (dal momento che probabilmente riutilizzerai gli stessi piani per le stesse query rispetto a set di dati molto diversi).
tutti i tuoi clienti sono soggetti agli stessi identici SLA e piani HA / DR. O hai l'intero database in modalità di ripristino completo con backup dei registri n-minute, oppure sei semplice e fai affidamento su backup full + diff. Se è necessario ripristinare a causa di un errore del cliente o se è necessario ripristinare il database in un determinato momento, ciò influisce su ogni singolo cliente.
vi sono potenziali errori nel recupero dei dati: i bug nei casi in cui le clausole, ad esempio, possono portare a un cliente a vedere i dati di un altro cliente o tutti i dati di altri clienti.
potrebbero esserci implicazioni legali (alcune aziende avranno requisiti rigorosi in vigore per cui non si collocano i loro dati nello stesso database di qualsiasi altra società, in particolare quelli dei loro concorrenti).
se la sicurezza dei dati di un cliente è importante, è molto più semplice ottenerlo utilizzando la separazione del database piuttosto che la separazione all'interno di una tabella.
Alcuni vantaggi di avere ciascun cliente in un database separato (o almeno avere più database, ciascuno per un gruppo di clienti):
DROP DATABASE
.Alcuni inconvenienti: