2010-05-09 14 views
18

Più leggo su NoSQL, più mi sembra un database orientato alle colonne.Qual è la differenza tra NoSQL e un database orientato alla colonna?

Qual è la differenza tra NoSQL (ad esempio CouchDB, Cassandra, MongoDB) e un database orientato alle colonne (ad esempio Vertica, MonetDB)?

+3

Distingue due tipi di negozi di colonne: http://dbmsmusings.blogspot.com/2010/03/distinguishing-two-major-types-of_29.html – tuinstoel

+0

Is Structured (columnar) vs Non-structured/Semi-structured (NoSQL). Pensala in questo modo. –

risposta

7

Alcuni database NoSQL sono database orientati alle colonne e alcuni database SQL sono orientati alle colonne. Se il database è orientato alla colonna o alla riga è un dettaglio di implementazione della memoria fisica del database e può essere vero per i database relazionali e non relazionali (NoSQL).

Vertica, ad esempio, è un database relazionale orientato alle colonne, quindi non si qualificherebbe effettivamente come datastore NoSQL.

Un datastore "NoSQL movement" è meglio definito come database non relazionale, condiviso-nulla, scalabile orizzontalmente senza (necessariamente) garanzie ACID. Alcuni database orientati alle colonne possono essere caratterizzati in questo modo. Oltre ai magazzini di colonne, le implementazioni NoSQL includono anche archivi di documenti, negozi di oggetti, negozi di tuple e archivi di grafici.

0

Come @tuinstoel scritto, il article risponde alla tua domanda di cui al punto 3:

3. Interface. Il gruppo A si distingue perché fa parte dello spostamento NoSQL e in genere non dispone di un'interfaccia SQL tradizionale in genere . Il gruppo B supporta interfacce standard SQL .

5

Un database NoSQL è un paradigma diverso dai database basati su schemi tradizionali. Sono progettati per ridimensionare e contenere documenti come dati JSON. Ovviamente hanno un modo di interrogare le informazioni, ma dovresti aspettarti una sintassi come eval ("person = * e age> 10) per recuperare i dati. Anche se supportano l'interfaccia SQL standard, sono intese per qualcos'altro, quindi se ti piace SQL

Un database orientato alle colonne è diverso dai tradizionali database orientati alle righe a causa del modo in cui memorizzano i dati. Memorizzando un'intera colonna insieme anziché una riga, è possibile ridurre l'accesso al disco quando si seleziona un poche colonne da una riga che contiene molte colonne.Nei database orientati alla riga non c'è differenza se si seleziona solo uno o tutti i campi da una riga

Si deve pagare per un inserto più costoso però. L'inserimento di una nuova riga causerà molte operazioni del disco, a seconda di il numero di colonne.

Ma non c'è differenza con i database tradizionali in termini di SQL, ACID, chiavi esterne e cose del genere.

3

Suggerirei di leggere lo taxonomy section della voce wikipedia NoSQL per avere un'idea di quanto diversi database NoSQL provengano da un database tradizionale orientato allo schema. Essere orientato alle colonne implica righe e colonne, il che implica uno schema (bidimensionale), mentre i database NoSQL tendono ad essere senza schema (archivi di valori-chiave) o hanno contenuti strutturati ma senza uno schema formale (archivi di documenti).

Per i negozi di documenti, la struttura e il contenuto di ciascun "documento" sono indipendenti da altri documenti della stessa "raccolta". L'aggiunta di un campo è solitamente una modifica del codice piuttosto che una modifica del database: i nuovi documenti ottengono una voce per il nuovo campo, mentre i documenti più vecchi sono considerati con un valore nullo per il campo inesistente.Allo stesso modo, "rimuovere" un campo potrebbe significare che semplicemente smetti di fare riferimento ad esso nel tuo codice piuttosto che cercare di cancellarlo da ogni documento (a meno che lo spazio sia limitato, e quindi hai la possibilità di rimuovere solo quelli con il più grande contenuto). Contrasto a come un'intera tabella deve essere modificata per aggiungere o rimuovere una colonna in un database di riga/colonna tradizionale.

I documenti possono contenere anche elenchi e altri documenti nidificati. Ecco un documento di esempio da MongoDB (un post da un blog o un altro forum), rappresentato come JSON:

{ 
    _id : ObjectId("4e77bb3b8a3e000000004f7a"), 
    when : Date("2011-09-19T02:10:11.3Z"), 
    author : "alex", 
    title : "No Free Lunch", 
    text : "This is the text of the post. It could be very long.", 
    tags : [ "business", "ramblings" ], 
    votes : 5, 
    voters : [ "jane", "joe", "spencer", "phyllis", "li" ], 
    comments : [ 
    { who : "jane", when : Date("2011-09-19T04:00:10.112Z"), 
     comment : "I agree." }, 
    { who : "meghan", when : Date("2011-09-20T14:36:06.958Z"), 
     comment : "You must be joking. etc etc ..." } 
    ] 
} 

noti come "commenti" è un elenco di documenti nidificati con una propria struttura indipendente. Le query possono "raggiungere" questi documenti dal documento esterno, ad esempio per trovare post con commenti di Jane o post con commenti da un determinato intervallo di date.

Quindi, in breve, due delle principali differenze tipiche dei database NoSQL sono la mancanza di uno schema (formale) e di contenuti che vadano oltre l'orientamento bidimensionale di un database di riga/colonna tradizionale.

0

Ecco come lo vedo: i database orientati alle colonne si occupano del modo in cui i dati vengono archiviati fisicamente sul disco. Come suggerisce il nome, ogni colonna è memorizzata in un proprio spazio/file separato. Ciò consente 2 cose importanti:

  1. Si ottiene un rapporto di compressione migliore dell'ordine di 10: 1 perché si ha a che fare con un singolo tipo di dati.
  2. È possibile ottenere prestazioni di lettura dei dati migliori perché si evitano scansioni di righe intere e si può semplicemente scegliere e scegliere le colonne specificate nella query SELECT.

NoSQL d'altra parte sono una nuova generazione di database che definiscono livelli di aggregazione "logici" per spiegare i dati. Alcuni trattano i dati come aventi relazioni gerarchiche (l'aggregato è un "nodo"), mentre l'altro tratta i dati come documenti (che è il livello aggregato). Non dettano la strategia di archiviazione fisica (alcuni potrebbero farlo, ma si allontaneranno dall'utente finale).

Inoltre, l'intero movimento NoSQL ha più a che fare con i dati non strutturati, o piuttosto con set di dati il ​​cui schema non può essere predefinito, o sconosciuto in precedenza, e quindi non può essere conforme al modello relazionale rigoroso.

Colonna Oriented database trattano ancora con i dati relazionali, anche se eliminare la necessità per l'indice ecc

5

NoSQL è termine usato per Non Solo SQL, che copre quattro principali categorie - valore-chiave, Documento, famiglia Colonna e di database del grafico.

I database a valore chiave sono adatti per le applicazioni che hanno frequenti piccole letture e scritture e semplici modelli di dati. Questi record vengono archiviati e recuperati utilizzando una chiave che identifica in modo univoco il record e viene utilizzato per trovare rapidamente i dati all'interno del database.

ad es. Redis, Riak ecc.

Banche Dati hanno la capacità di memorizzare gli attributi diversi con grandi quantità di dati

esempio MongoDB, CouchDB ecc

Colonna famiglia database sono progettati per grandi volumi di dati, leggere e scrivere le prestazioni e alta disponibilità

ad esempio Cassandra, HBase ecc

Il database è un database che utilizza le strutture del grafico per query semantiche con nodi, spigoli e proprietà per rappresentare e memorizzare i dati

es Neo4j, InfiniteGraph ecc

Prima di capire NoSQL, devi capire alcuni concetti chiave.

Coerenza - Tutti i server nel sistema avranno gli stessi dati in modo che chiunque utilizzi il sistema otterrà la stessa copia indipendentemente dal server che risponde alla richiesta.

Disponibilità - Il sistema risponderà sempre a una richiesta (anche se non sono i dati più recenti o coerenti nel sistema o solo un messaggio che dice che il sistema non funziona).

Tolleranza partizione - Il sistema continua a funzionare nel suo complesso anche se singoli server non funzionano o non possono essere raggiunti.

Nella maggior parte dei casi, solo due di queste tre proprietà vengono soddisfatte dai database NoSQL.

Dalla tua domanda,

CouchDB: AP (disponibilità & partizione) del database & documento

Cassandra: AP (disponibilità & partizione) del database famiglia & Colonna

MongoDB: CP (Consistenza & partizione) del database & documento

Vertica: CA (Consistenza & disponibilità) database di famiglia & Colonna

MonetDB: ACID (Atomicità Consistenza Isolamento Durabilità) & Database relazionale

Da: http://blog.nahurst.com/visual-guide-to-nosql-systems

enter image description here

Date un'occhiata a questo article1, article2 e ppt per diversi scenari di selezionare un particolare tipo di database.

Problemi correlati