2013-03-23 10 views
20

Schemaless è un termine che sta attualmente fluttuando nel mondo NoSql.Che cosa significa schema-less per un database NoSQL?

  1. Cosa significa?
  2. Ho un documento con 3 proprietà oggi e passo alla produzione con esso, quindi cosa succede ai miei dati quando devo aggiungere altre 2 proprietà al mio documento?
  3. Questo è un problema di migrazione in cui è necessario gestire la migrazione dei dati oppure un database NoSql può creare tanto attrito come RDBMS o renderlo più semplice in qualche modo?

risposta

16

schema-less è un po 'un termine improprio, è meglio pensare ad esso come:

  • SQL = lo schema imposto da un RDBMS sulla scrittura
  • NoSQL = lo schema parziale imposto dal DBMS sulla scrittura, PLUS schema eseguita integralmente dal Applicazione su Read (esternalizzata schema)

Così, mentre un presunto schema-less NoSQL dati-store sarà in teoria permette di memorizzare tutti i dati che ti piace (typica lly coppie di valori chiave, in un documento) senza conoscenza preliminare delle chiavi o tipi di dati, sarà inutile a meno che non si disponga di un meccanismo per recuperare e utilizzare i dati. Quindi, in sostanza, lo schema viene parzialmente spostato da RDBMS nel codice dell'applicazione. Dico parzialmente come avrete aggiunto gli indici per documentare le raccolte e/o partizionare i dati per le prestazioni, quindi il DBMS NoSQL avrà uno schema parziale definito localmente e probabilmente applicato tramite vincoli Unique.

Come aggiungere ulteriori attributi a un documento/oggetto nel negozio. A seconda della quantità di padding attorno al documento (spazio non utilizzato), nel suo blocco di dati fisici, l'aggiunta di alcune coppie di valori chiave ai documenti può comportare la necessità di spostare fisicamente il documento in un blocco contiguo di memoria più grande, e gli indici associati ricostruiti. Se si prevede di utilizzare le nuove chiavi in ​​una query utilizzata frequentemente, si vorrà aggiungere anche un nuovo indice adatto, che richiederà ovviamente un po 'di spazio fisico, richiedere un po' di tempo per la creazione iniziale e possibilmente portare a chiedere al sysadmin di allocare più memoria al DBMS, per consentire la memorizzazione dei nuovi indici.

+0

Buon punto sull'allocazione dello spazio. Ma in particolare per i punti 2 e 3, come faccio a gestire i dati con la migrazione dei dati? Un prodotto NoSQ è abbastanza intelligente da rilevare i cambiamenti che si verificano in caso di rottura incrementale e irrefrenabile? –

+2

Dipende dal prodotto, ma in generale se si desidera aggiungere ulteriori attributi/chiavi a un documento, tutto ciò che è necessario fare è modificare il codice dell'applicazione per memorizzare/utilizzare le nuove coppie di valori chiave. Il DBMS non si preoccupa di cosa è memorizzato in un documento se non deve essere indicizzato, e supponendo che ci sia abbastanza spazio assegnato per ogni documento, così che il DBMS non debba ristrutturare il suo back-end. – arober11

+0

Quindi dobbiamo tener conto del possibile aumento della dimensione del documento prima della mano? –

2

un po 'tardi nel corso della giornata, ma durante la ricerca sul tema ancora una volta ho trovato questo articolo

http://tech.pro/tutorial/1189/basics-of-ravendb-nosql

fare riferimento alla sezione 3 in questo articolo, citerò di nuovo per la facilità.

L'aggiunta e la modifica di modelli di dati in RavenDB non potrebbe essere più semplice. Dal è un database NoSQL, può gestire le aggiunte e le eliminazioni ai tuoi modelli in modo molto semplice. Se una proprietà viene aggiunta alla tua classe, sarà impostata sul valore predefinito di quel tipo. Se una proprietà viene cancellata, quindi in seguito alla deserializzazione, quel valore verrà ignorato. Non più futzing con gli script SQL .

Questa sembra essere la risposta logica per RavenDB.