Quando si tratta di applicazioni di grandi dimensioni con un enorme database contenente milioni di record, ci si rende presto conto che semplici selezioni, aggiornamenti, inserimenti ed eliminazioni semplicemente non sono sufficienti.
Quindi inizi a pensare in un modo diverso. Si creano procedure e trigger per occuparsi di cose più complicate direttamente nel database e questo non è molto buono. I database offrono grandi prestazioni durante l'esecuzione di operazioni CRUD. Procedure lunghe? Non così tanto.
Il problema con le procedure
Ora immagina di passare a un database che non supporta il concetto di procedure? Che cosa hai intenzione di fare? Sei costretto a spostare le procedure sul tuo codice base, dove puoi essere abbastanza sicuro che una volta programmato, diciamo Java, rimarrà sempre lì, indipendentemente dal motore di database che scegli.
Per non parlare, le tue procedure sono di solito parte della tua logica aziendale e non è una buona idea avere la tua logica aziendale divisa tra la base di codice e il database.
Idealmente, dovresti sempre avere un mediatore tra il database e il cliente che implementa le proprie regole aziendali. Fornire accesso diretto al database non è una buona idea, perché quando lo fai, quello con accesso ha accesso diretto alle tabelle e può fare praticamente qualsiasi cosa con i dati che ci sono.
Svantaggi
-
Ci vuole più tempo per svilupparsi: Naturalmente, stai creando un nuovo sistema, che richiederà più tempo del semplice dare al client una stringa di connessione al database e lasciargli scrivere le query.
-
Più complesso: complessità di un sistema > complessità di una query del database.
-
Il server fa più lavoro: Non necessariamente. Con una buona progettazione, il caching, ... puoi spostare il carico dal server del database a quello del mediatore.
-
Più lento: In termini di sviluppo? Sì. In termini di velocità durante il recupero dei dati? No. Puoi ottimizzare il tuo mediatore usando cache (come - popolare a partire da gennaio 2016 - Redis, Elasticsearch) e renderlo effettivamente più veloce di una semplice query di database.
vantaggi
-
La migrazione ad altre piattaforme è più semplice: migrazione verso un nuovo motore di database? Decisamente. Migrare l'intero mediatore in una nuova lingua? Non proprio.
-
La Business Logic è necessaria anche quando si chiama direttamente il database. Non ci vorrà molto più tempo per sviluppare: come spiegato in precedenza, il problema delle procedure.
-
Sicurezza: con una corretta autorizzazione con mediatore è sicuramente molto più sicuro di un accesso diretto all'utente al database, perché lo limiti ai punti finali che eseguono solo le query che desideri.
-
Manutenibilità: uno dei migliori vantaggi di avere un mediatore. Se c'è un bug in un'API che i client chiamano, lo correggi, spinga la correzione al tuo repository VCS, costruisci il tuo mediatore dalla versione curres di VCS che contiene la correzione e tutti i tuoi clienti stanno improvvisamente usando la correzione, senza che loro debbano scarica un aggiornamento. Questo è semplicemente impossibile da fare, se le query sono memorizzate direttamente nelle applicazioni client. In tal caso, i clienti sono costretti ad aggiornare la loro applicazione.