Domanda

Ho sentito cose su NoSQL e che potrebbe alla fine diventare la sostituzione per i metodi di archiviazione SQL DB a causa del fatto che l'interazione DB è spesso un collo di bottiglia per la velocità sul web.

Così ho alcune domande:

  1. Che cosa è esattamente?

  2. Come funziona?

  3. Perché sarebbe meglio che utilizzare un database di SQL? E quanto meglio è?

  4. E 'la tecnologia troppo nuovo per iniziare ad attuare ancora o vale la pena dare un'occhiata in?

È stato utile?

Soluzione

  1. Che cosa è esattamente?

    Da un lato, una specifica sistema , ma è anche diventato un termine generico per un varietà di nuovo backend di memorizzazione dei dati che non seguono il modello DB relazionale.

  2. Come funziona?

    Ognuno dei sistemi etichettati con il nome generico funziona in modo diverso, ma l'idea di base è quello di offrire una migliore scalabilità e prestazioni utilizzando modelli di DB che non supportano tutte le funzionalità di un RDBMS generici, ma ancora abbastanza funzionalità per essere utile . In un certo senso è come MySQL, che una volta mancava il supporto per le transazioni, ma, esattamente perché di che, è riuscito a sovraperformare gli altri sistemi di DB. Se si potesse scrivere la vostra applicazione in un modo che non richiedono le transazioni, è stato fantastico.

  3. Perché sarebbe meglio che utilizzare un database di SQL? E quanto meglio è?

    Sarebbe meglio quando il sito ha bisogno di scalare così massicciamente che i migliori RDBMS in esecuzione sul miglior hardware si può permettere e ottimizzato per quanto possibile, semplicemente non può tenere il passo con il carico. Quanto meglio è dipende dal caso d'uso specifico (un sacco di attività di aggiornamento in combinazione con un sacco di join è molto difficile su RDBMS "tradizionale") -. Potrebbe anche essere un fattore di 1000 in casi estremi

  4. è la tecnologia troppo nuovo per iniziare ad attuare ancora o vale la pena dare un'occhiata in?

    Dipende principalmente su ciò che si sta cercando di raggiungere. E 'certamente abbastanza maturi da usare. Ma alcune applicazioni davvero bisogno di scala che in maniera massiccia. Per la maggior parte, un RDBMS tradizionale è sufficiente. Tuttavia, con l'uso di internet sempre più onnipresente per tutto il tempo, è molto probabile che le applicazioni che fanno diventeranno più comuni (anche se probabilmente non dominante).

Altri suggerimenti

Non esiste una cosa come NoSQL!

NoSQL è una parola d'ordine.

Per decenni, quando le persone stavano parlando di basi di dati, che significava database relazionali. E quando le persone stavano parlando di basi di dati relazionali, hanno significato quelli di controllare con Structured Query Language di Edgar F. Codd. L'archiviazione dei dati in qualche altro modo? Follia! Tutto il resto è solo flatfiles.

Ma negli ultimi anni, la gente ha iniziato a mettere in discussione questo dogma. La gente si chiedeva se le tabelle con righe e le colonne sono davvero l'unico modo per rappresentare i dati. La gente ha iniziato a pensare e codifica, e si avvicinò con molti nuovi concetti come potrebbero essere organizzati i dati. E hanno cominciato a creare nuovi sistemi di database progettati per questi nuovi modi di lavorare con i dati.

Le filosofie di tutti questi database erano diverse. Ma una cosa tutti questi database avevano in comune, era che il Structured Query Language non era più una buona misura per il loro utilizzo. Così ogni database SQL sostituito con i propri linguaggi di interrogazione. E così il termine NoSQL è nato, come etichetta per tutte le tecnologie di database che sfidano il classico modello di database relazionale.

Allora, cosa fare dei database NoSQL hanno in comune?

In realtà, non molto.

Si sente spesso dire frasi del tipo:

  • NoSQL è scalabile!
  • NoSQL è per BigData!
  • NoSQL viola ACIDO!
  • NoSQL è un negozio chiave / valore glorificato!

È vero? Beh, alcune di queste affermazioni potrebbe essere vero per alcuni database NoSQL comunemente chiamati, ma ognuno è anche false per almeno un altro. In realtà, l'unica cosa che i database NoSQL hanno in comune, è che sono i database che non utilizzano SQL. Questo è tutto. L'unica cosa che li definisce è ciò che li distingue gli uni dagli altri.

Quindi, ciò che contraddistingue NoSQL banche dati a parte?

Così abbiamo fatto chiaro che tutti i database comunemente indicato come NoSQL sono troppo diversi per valutare insieme. Ognuno di loro ha bisogno di essere valutati separatamente per decidere se sono una buona misura per risolvere un problema specifico. Ma da dove cominciare? Per fortuna, i database NoSQL possono essere raggruppati in alcune categorie, che sono adatti per i diversi casi d'uso:

Documento-oriented

Esempi: MongoDB, CouchDB

Punti di forza: i dati eterogenee, che lavorano object-oriented, sviluppo agile

Il loro vantaggio è che essi non richiedono una struttura di dati coerenti. Sono utili quando i vostri requisiti e quindi il layout del database cambia continuamente, o quando si tratta di insiemi di dati che appartengono insieme, ma ancora aspetto molto diverso. Quando hai un sacco di tavoli con due colonne chiamate "chiave" e "valore", allora questi potrebbero essere merita di essere esaminata.

database Grafico

Esempi:. Neo4j, GiraffeDB

Punti di forza: Data Mining

Mentre la maggior parte dei database NoSQL abbandonare il concetto di gestione dei rapporti di dati, questi database abbracciano anche più di quei cosiddetti database relazionali.

Il loro obiettivo è di definire i dati per la sua relazione con altri dati. Quando hai un sacco di tabelle con chiavi primarie che sono le chiavi primarie delle altre due tabelle (e forse alcuni dati che descrivono il rapporto tra di loro), allora questi potrebbero essere qualcosa per te.

valore-chiave Stores

Esempi: Redis, Cassandra, MemcacheDB

Punti di forza: ricerca veloce dei valori con i tasti noti

Sono molto semplicistico, ma che li rende veloce e facile da usare. Quando si ha bisogno di stored procedure, vincoli, trigger e tutte quelle funzionalità di database avanzate e si desidera solo memorizzazione veloce e il recupero dei dati, poi quelli sono per voi.

Purtroppo gli operatori ritengono che si sa esattamente quello che stai cercando. È necessario il profilo di User157641? Nessun problema, ci vorranno solo microsecondi. Ma cosa quando si desidera che i nomi di tutti gli utenti che sono di età compresa tra i 16 ei 24 anni, avere "cialde" come loro facibo vorite e registrato nelle ultime 24 ore? Che sfortuna. Quando non si dispone di una chiave definita e unica per un risultato specifico, non è possibile ottenere dal tuo negozio K-V che facilmente.

è SQL obsoleto?

Alcuni sostenitori NoSQL affermano che il loro database NoSQL preferito è il nuovo modo di fare le cose, e SQL è una cosa del passato.

Hanno ragione?

No, certo che non lo sono. Mentre non ci sono problemi di SQL non è adatto per, ancora ottenuto i suoi punti di forza. Un sacco di modelli di dati sono semplicemente meglio rappresentati come un insieme di tabelle che fanno riferimento a vicenda. Soprattutto perché la maggior parte dei programmatori di database sono stati addestrati per i decenni a pensare di dati in modo relazionale, e cercando di premere questa mentalità su una nuova tecnologia, che non è stato fatto per essa finisce raramente bene.

database NoSQL non sono un sostituto per SQL - sono un'alternativa

.

La maggior parte degli ecosistemi di software in tutto i diversi database NoSQL non sono ancora come maturo. Mentre ci sono progressi, ancora non hai strumenti supplementari, che sono come maturo e potente come quelli disponibili per i database SQL popolari.

Inoltre, c'è molto di più il know-how per SQL intorno. Generazioni di scienziati informatici hanno trascorso decenni della loro carriera nella ricerca concentrandosi su database relazionali, e si vede: la letteratura scritta sui database SQL e modellazione dei dati relazionali, sia pratiche che teoriche, potrebbe riempire più librerie piene di libri. Come costruire un database relazionale per i dati è un argomento così ben studiato: è difficile trovare un caso d'angolo dove non c'è una best practice by-the-book generalmente accettato.

La maggior parte dei database NoSQL, d'altra parte, sono ancora nella loro infanzia. Stiamo ancora cercando di capire il modo migliore per usarli.

Dato che qualcuno ha detto che il mio post precedente era off-topic, cercherò di compensare :-) NoSQL non è, e non è mai stato, destinato ad essere un sostituto per più database SQL tradizionali, ma un paio di parole sono in al fine di ottenere le cose nella giusta prospettiva.

Nel cuore della NoSQL filosofia trova la considerazione che, forse per ragioni commerciali e portabilità, motori SQL tendono a trascurare l'enorme potenza del sistema operativo UNIX e suoi derivati.

Con un database file system-based, è possibile usufruire immediatamente delle sempre crescenti capacità e potenza del sistema operativo sottostante, che sono in costante aumento da molti anni in conformità alla legge di Moore. Con questo approccio, molti comandi del sistema operativo diventano automaticamente anche "operatori di database" (pensare a "ls" "sort", "trovare" e gli altri innumerevoli utilità shell UNIX).

Con questo in mente, e un po 'di creatività, si può infatti concepire un database file system-based che è in grado di superare i limiti di molti motori SQL comuni, almeno per quanto riguarda i modelli di utilizzo specifico, che è l'intero punto dietro NoSQL di la filosofia, il modo in cui la vedo io.

ho eseguito centinaia di siti web e tutti usano NoSQL, in misura maggiore o minore. In realtà, essi non ospitano enormi quantità di dati, ma anche se alcuni di loro probabilmente potrei pensare ad un uso creativo del NoSQL e il filesystem per superare eventuali colli di bottiglia. Qualcosa che sarebbe probabilmente più difficile con SQL tradizionali "prigioni". Vi esorto a Google per "unix", "manis" e "Shaffer" per capire cosa intendo.

Se non ricordo male, si riferisce a tipi di database che non necessariamente seguono la forma relazionale. Banche Dati vengono in mente, database senza una struttura specifica, e che non utilizzare SQL come linguaggio di query specifica.

E 'generalmente più adatto per le applicazioni web che si basano sulle prestazioni del database, e non hanno bisogno di funzionalità più avanzate di motori di relazioni database. Ad esempio, un negozio di valore Key-> fornendo una semplice query interfaccia id potrebbe essere 10-100x più veloce rispetto alla implementazione del server SQL corrispondente, con un costo di manutenzione inferiore di sviluppo.

Un esempio è questo per un OLTP Tuple Store, che ha sacrificato le transazioni per l'elaborazione a thread singolo (nessun problema di concorrenza, perché nessuno concorrenza consentito) , e mantenuto tutti i dati nella memoria; ottenendo 10-100x migliori prestazioni rispetto ad un RDBMS sistema guidato simile . In sostanza, si sta muovendo dalla 'One Size Fits All' vista dei sistemi di SQL e di database.

In pratica, NoSQL è un sistema di database che supporta l'accesso veloce a grandi oggetti binari (documenti, jpgs ecc) utilizzando una strategia di accesso basata su chiave. Questa è una partenza dal tradizionale accesso SQL che è abbastanza buono solo per i valori alfanumerici. Non solo la strategia di archiviazione e accesso interno ma anche la sintassi e limitazioni sul formato di visualizzazione limita l'SQL tradizionale. implementazioni BLOB di database relazionali tradizionali troppo soffrono di queste restrizioni.

Dietro la scena è un'ammissione indiretta del fallimento del modello SQL per supportare qualsiasi forma di OLTP o il supporto per i nuovi DataFormats. "Supporto" significa non solo conservare, ma le capacità di accesso completo - programmatico e querywise utilizzando il modello standard.

Gli appassionati relazionali si sono affrettati a modificare la defnizione di NoSQL da Non-SQL per Non-solo-SQL per mantenere SQL ancora in foto! Questo non è buono soprattutto quando vediamo che la maggior parte dei programmi Java oggi ricorso alla mappatura ORM del modello relazionale sottostante. Un nuovo concetto deve avere una definizione netta. Altrimenti finirà come SOA.

La base dei sistemi di NoSQL risiede nella chiave casuale - coppia di valori. Ma questa non è una novità. sistemi di database tradizionali come IMS e IDMS hanno il supporto hash chiavi ramdom (senza fare uso di qualsiasi indice) e lo fanno ancora. Infatti IDMS ha già un NONSQL parola chiave in cui supportano l'accesso SQL per il loro più vecchio database di rete che loro chiamarono come NONSQL.

E 'come Jacuzzi: sia un marchio e un nome generico. Non è solo una tecnologia specifica, ma piuttosto una specifica tipo della tecnologia, in questo caso riferendosi a larga scala (spesso sparse) "database", come BigTable o CouchDB di Google.

NoSQL l'attuale il programma sembra essere un database relazionale implementato in awk utilizzando file flat sul backend. Anche se essi professano, "NoSQL ha essenzialmente limiti arbitrari, e può funzionare dove altri prodotti non possono. Ad esempio, non v'è alcun limite alla dimensione del campo di dati, il numero di colonne, o la dimensione del file", non credo sia il database su larga scala del futuro.

Come dice Joel, massicciamente database scalabili come BigTable o HBase , sono molto più interessante. GQL è il linguaggio di query associata con BigTable e App Engine. E 'in gran parte SQL ottimizzato per evitare dispone di Google considera colli di bottiglia (come si unisce). Tuttavia, non ho sentito questa denominato "NoSQL" prima.

NoSQL è un sistema di database che non utilizza le query SQL corda a base per recuperare i dati.

Invece di costruire query utilizzando un'API che fornirà, ad esempio Amazon DynamoDB è un buon esempio di un database NoSQL.

database NoSQL sono migliori per le grandi applicazioni in cui la scalabilità è importante.

  

Vuol dire NoSQL database non-relazionali?

Sì, NoSQL è diverso da RDBMS e OLAP. Esso utilizza modelli di consistenza più flessibile rispetto a database relazionali tradizionali.

Modelli di consistenza che sono utilizzati in sistemi distribuiti, come sistemi di memoria condivisa distribuiti o file system distribuito.

  

Come funziona internamente?

sistemi di database NoSQL sono spesso altamente ottimizzati per il recupero e operazioni aggiungendo e spesso offrono poca funzionalità oltre memorizzazione di registrazioni (ad esempio memorie dei valori-chiave). La flessibilità in fase di esecuzione ridotti rispetto ai sistemi SQL completa è compensata dagli aumenti marcati in termini di scalabilità e prestazioni per alcuni modelli di dati.

Si può lavorare su dati strutturati e non strutturati. Esso utilizza Collezioni al posto delle tabelle

  

Come si esegue una query come "database"?

SQL vs NoSQL: Battaglia di backend ; che spiega tutto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top