2010-08-06 12 views
8

Ho letto alcuni articoli che affermano che RDBMS come MySQL non è adatto allo scalabile, ma NoSQL come MongoDB può dividere bene. Desidero sapere quale funzione fornita da RDBMS non può essere eseguita correttamente.Perché NoSQL dice che il RDBMS tradizionale non è adatto allo scalabile

+0

stai dicendo "condiviso", o "Shard"? – StingyJack

+0

O a scelta? (come in Lucene)? – bmargulies

+1

[Shard] (http://en.wikipedia.org/wiki/Shard_%28database_architecture%29), come nel condividere il tuo database in partizioni separate. –

risposta

30

maggior parte dei sistemi RDBMS garantiscono la cosiddetta ACID properties. La maggior parte di queste proprietà si riduce alla consistenza ; ogni modifica sui dati trasferirà il database da uno stato coerente a un altro stato coerente.

Ad esempio, se si aggiornano più record in una singola transazione, il database assicurerà che i record coinvolti non saranno modificati da altre query, purché la transazione non sia stata completata. Quindi durante la transazione, più tabelle possono essere bloccate per la modifica. Se tali tabelle sono distribuite su più frammenti/server, ci vorrà più tempo per acquisire i blocchi appropriati, aggiornare i dati e rilasciare i blocchi.

Le CAP theorem stati che un sistema distribuito (cioè scalabile) non può garantire tutte le seguenti proprietà al tempo stesso:

  • Coerenza
  • disponibilità
  • tolleranza di ripartizione

RDBMS i sistemi garantiscono la coerenza. Sharding rende il sistema tollerante al partizionamento. Dal teorema segue che il sistema non può quindi garantire la disponibilità. Ecco perché un RDBMS standard non può scalare molto bene: non sarà in grado di garantire la disponibilità. E a che serve un database se non riesci ad accedervi?

I database NoSQL riducono la coerenza a favore della disponibilità. Ecco perché sono migliori in termini di scalabilità.

Non sto dicendo che i sistemi RDBMS non possono scalare affatto, è solo più difficile. This article delinea alcuni dei possibili schemi di sharding e i problemi che potresti incontrare. La maggior parte degli approcci sacrifica la coerenza, che è una delle caratteristiche più importanti dei sistemi RDBMS e che impedisce il ridimensionamento.

0

query che coinvolgono più frammenti sono complesse (f.e. join tra tabelle in diversi frammenti)

+0

Cosa succede se non uso mai unire in RDBMS? RDBMS diventerà shard facilmente? In tal caso, non sembra necessario implementare un nuovo database chiamato NoSQL. – shuitu

+2

I RDBMS sono pensati per essere un sistema di gestione per il database 'relazionale'. E le relazioni tra i dati sono mostrate da JOINs tra tabelle. Se non stai usando JOINs significa che il tuo database non è relazionale, quindi puoi spostare NoSQL che sono negozi di valore/chiave. –

Problemi correlati