NoSql non è un sostituto dei database SQL ma è una valida alternativa per molte situazioni in cui l'SQL standard non è l'approccio migliore per archiviare i tuoi dati.
Poiché ci è stato insegnato che ogni volta che devi archiviare dati in un "data warehouse" e interrogarli per l'estrazione, SQL è la soluzione migliore, devi solo decidere quale motore SQL utilizzare e il gioco è finito.
Nel 2012 questo suggerimento era sbagliato, voglio dire che non puoi più presumere che SQL sia "l'unico modo" per archiviare i dati, ma dovresti sapere che ci sono altre alternative e si chiamano NO SQL. Sotto questo termine, abbiamo diversi meccanismi di archiviazione che non sono basati su SQL, e in .NET abbiamo un prodotto eccezionale chiamato RavenDB (puoi trovare un'ottima introduzione a RavenDb nel blog di Mauro).
La prima grande differenza con l'SQL standard è l'assenza di uno schema
Una delle limitazioni più fastidiose di SQL Server è la necessità di specificare il formato esatto dei dati che desideri archiviare nella tua memoria. Questo è necessario per molte buone ragioni, ma ci sono situazioni in cui non ti interessa davvero, specialmente se il tuo software è in gran parte basato sul concetto OOP. Supponiamo di avere questo oggetto
1: class player
2: {
3: public String Name { get; set; }
4:
5: public DateTime RegistrationDate { get; set; }
6:
7: public Int32 Age { get; set; }
8: }
Per un momento non c'è alcuna preoccupazione che questo oggetto sia incapsulato male (ha un metodo pubblico per ottenerlo e installarlo), ma si è concentrato solo sulla necessità di "memorizzare" questo oggetto da qualche parte. Se utilizzi un repository SQL standard, la prima cosa che devi fare è creare una tabella, quindi definire le colonne, definire la lunghezza massima per la colonna Nome e infine selezionare l'ORM da utilizzare o creare un livello dati dedicato e infine, puoi salvare l'oggetto.
Se stai lavorando con un corvo, questo è l'unico codice di cui hai bisogno
1: var store = new DocumentStore { Url = "http://localhost:8080" };
2: store.Initialize();
3: using (var session = store.OpenSession())
4: {
5: var player = new Player
6: {
7: Age = 30,
8: RegistrationDate = DateTime.Now,
9: Name = "Alkampfer",
10: };
11: session.Store(player);
12: session.SaveChanges();
13: }
Il server prende semplicemente l'oggetto e lo salva.
Per salvare un oggetto nel data warehouse sono necessarie solo due funzioni:“Salva” per indicare al repository l'oggetto che si desidera salvare, e “SalvaChanges”, che esegue effettivamente il salvataggio.
Cosa ottieni con questo semplice frammento di codice? Basta andare al browser standard all'indirizzo del server e dovresti vedere il contenuto del database.
Contenuti del database dopo un semplice inserimento di oggetti
In figura, puoi vedere il contenuto del corvo del database, contiene un giocatore e un piccolo 1 accanto all'oggetto è Id, che Raven usa internamente per identificare in modo univoco questo oggetto. Un altro oggetto, chiamato Sys Doc Hilo / Players, si occupa di generare un identificatore per l'oggetto Players con l'algoritmo Hilo.
Questo è tutto, non è necessario definire lo schema, non è necessario avere una proprietà Id speciale o qualsiasi altro requisito per rendere l'oggetto compatibile con il repository, basta chiamare il metodo Store per qualsiasi oggetto .NET e il tuo oggetto è nel database, Punto!