Sembra che tu abbia preso una decisione tecnica essenzialmente valida, a breve termine per l'archivio dati per la tua applicazione: hai scelto di scrivere uno strumento di gestione dell'archivio dati personalizzato.
Sei seduto su un continuum, con opzioni per spostarti in entrambe le direzioni.
A lungo termine, probabilmente (quasi, ma certamente non al 100%) vi troverete a trovarvi nei guai e potrebbe essere meglio passare all'utilizzo delle soluzioni di archivio dati esistenti. Esistono problemi prestazionali specifici, molto comuni, prevedibili, che sarai costretto a gestire e che stai meglio utilizzando gli strumenti esistenti invece di implementare i tuoi.
Sembra che tu abbia scritto un (piccolo) database personalizzato, integrato e utilizzato direttamente dalla tua applicazione. Suppongo che ti affidi a un sistema operativo e un file system per gestire la scrittura e la lettura del disco e trattare la combinazione come un archivio dati.
Quando fare quello che hai fatto
Sei seduto in un punto debole per l'archiviazione dei dati. Un archivio dati di sistemi operativi e file system è incredibilmente conveniente, accessibile e portatile multipiattaforma. La combinazione esiste da così tanto tempo che sei certo di essere supportato e far funzionare la tua applicazione su quasi tutte le configurazioni di distribuzione standard.
È anche una combinazione facile per cui scrivere codice: l' API è abbastanza semplice e di base e ci vogliono relativamente poche righe di codice per farlo funzionare.
In generale, è l'ideale per fare ciò che hai fatto quando:
- Prototipazione di nuove idee
- Creazione di applicazioni che è altamente improbabile che debbano essere ridimensionate, per quanto riguarda le prestazioni
- Vincolato da circostanze insolite, come la mancanza di risorse per l'installazione di un database
alternative
Sei su un continuum di opzioni e ci sono due "direzioni" che puoi seguire da qui, quello che io penso come "giù" e "su":
Giù
Questa è l'opzione meno probabile da applicare, ma è qui per completezza:
Puoi, se vuoi, andare giù , cioè bypassare completamente il sistema operativo e il file system e davvero scrivere e leggere direttamente dal disco. Questa scelta è generalmente pertinente solo nei casi in cui è richiesta un'estrema efficienza: pensate, ad esempio, a un dispositivo lettore MP3 minimale / minuscolo , senza RAM sufficiente per un sistema operativo completamente funzionante o a qualcosa come la Wayback Machine , che richiede una massa incredibilmente efficiente operazioni di scrittura dei dati (la maggior parte degli archivi di dati scambia scritture più lente per letture più veloci, poiché questo è il caso di utilizzo più comune per quasi tutte le applicazioni).
Su
Esistono diverse sottocategorie qui, ma non sono esattamente esclusive. Alcuni strumenti si estendono su entrambi, fornendo alcune funzionalità in ciascuno, alcuni possono passare completamente dal lavorare in una modalità all'altra e alcuni possono essere sovrapposti l'uno sull'altro, fornendo funzionalità diverse a diverse parti dell'applicazione.
Archivi di dati più potenti
Potrebbe essere necessario archiviare volumi sempre più elevati di dati, pur facendo affidamento sulla propria applicazione per gestire la complessità della manipolazione dei dati. È disponibile una vasta gamma di negozi di valori-chiave, con diverse dimensioni di supporto per le funzioni correlate. Gli strumenti NoSQL rientrano in questa categoria, così come in altri.
Questo è l'ovvio percorso su cui scalare quando quanto segue descrive la tua applicazione:
- È insolitamente pesante da leggere
- Stai bene negoziando prestazioni più elevate per garanzie di coerenza inferiori (a breve termine) (molte offrono "eventuale coerenza").
- Gestisce "direttamente" la maggior parte della manipolazione dei dati e la mancanza di coerenza (in pratica, probabilmente finirai per utilizzare inizialmente uno strumento di terze parti, anche se alla fine lo porterai nella tua applicazione o in un livello intermedio scritto personalizzato) .
- Stai cercando di ridimensionare in modo massiccio la quantità di dati che stai memorizzando e / o la tua capacità di cercarli, con requisiti di manipolazione dei dati "relativamente semplici".
C'è un po 'di spazio qui: puoi forzare una migliore coerenza della lettura, per letture più lente. Vari strumenti e opzioni forniscono API di manipolazione dei dati, indicizzazione e altre opzioni, che possono essere più o meno adatte per scrivere facilmente l'applicazione specifica. Quindi, se i punti sopra descritti descrivono quasi completamente la tua applicazione, potresti essere "abbastanza vicino" per lavorare con una soluzione di archiviazione dati più potente.
Esempi noti: CouchDB , MongoDB , Redis , soluzioni di archiviazione cloud come Microsoft Azure , Google App Data Store e Amazon ECE.
Motori di manipolazione dei dati più complessi
La famiglia di applicazioni di archiviazione dei dati "SQL", così come una serie di altre, sono meglio descritte come strumenti di manipolazione dei dati, piuttosto che motori di archiviazione puri. Forniscono una vasta gamma di funzionalità aggiuntive, oltre alla memorizzazione dei dati e spesso al di là di ciò che è disponibile nel lato archivio valori chiave delle cose. Ti consigliamo di seguire questo percorso quando:
- Devi assolutamente leggere la coerenza, anche se ciò significa che subirai un colpo di performance.
- Stai cercando di eseguire in modo efficiente manipolazioni di dati molto complessi - pensa a operazioni JOIN e UPDATE molto complesse, cubi di dati e slicing, ecc ...
- Stai bene scambiando la rigidità per le prestazioni (pensa a formati di archiviazione dati forzati e fissi, come le tabelle, che non possono essere modificati facilmente e / o in modo efficiente).
- Hai le risorse per gestire un insieme di strumenti e interfacce spesso più complessi.
Questo è il modo più "tradizionale" di pensare a un database o un archivio dati, ed è in circolazione da molto più tempo - quindi qui c'è molto che è disponibile e spesso c'è molta complessità da affrontare. È possibile, anche se richiede un po 'di esperienza e conoscenza e crea soluzioni semplici / evita gran parte della complessità - molto probabilmente finirai per utilizzare strumenti e librerie di terze parti per gestirne la maggior parte, però.
Esempi ben noti sono MySQL , SQL Server , Oracle's Database e DB2 .
Esternalizzare il lavoro
Esistono diversi e moderni strumenti e librerie di terze parti, che si interpongono tra gli strumenti di archiviazione dei dati e l'applicazione, per aiutarti a gestire la complessità.
Tentano inizialmente di eliminare la maggior parte o tutto il lavoro di gestione e manipolazione degli archivi di dati e, idealmente, consentono di effettuare una transizione graduale alla complessità solo quando e se necessario. Questa è un'area attiva di imprenditoria e ricerca, con alcuni risultati recenti che sono immediatamente accessibili e utilizzabili.
Esempi ben noti sono gli strumenti MVC ( Django , Yii ), Ruby on Rails e Datomic . È difficile essere onesti qui perché ci sono letteralmente dozzine di strumenti e librerie che fungono da involucri attorno alle API di vari archivi di dati.
PS: se preferisci i video al testo, potresti voler guardare alcuni dei video relativi al database di Rich Hickey; fa un buon lavoro nel chiarire la maggior parte del pensiero che va nella scelta, nella progettazione e nell'uso di un archivio dati.