Non so molto su BigTable di Google, ma mi chiedo quale sia la differenza tra la BigTable di Google e database relazionali come MySQL. Quali sono i limiti di entrambi?
risposta
Bigtable è un'invenzione di Google per gestire le enormi quantità di informazioni che la società tratta regolarmente. Un set di dati Bigtable può raggiungere dimensioni immense (molti petabyte) con storage distribuito su un numero elevato di server. I sistemi che utilizzano Bigtable includono progetti come l'indice web di Google e Google Earth.
Secondo Google whitepaper sul tema:
Un BigTable è una, distribuito, persistente Cartina selezionato multidimensionale sparse. La mappa è indicizzata da una chiave di riga, una chiave di colonna e un timestamp; ogni valore nella mappa è una matrice di byte non interpretata.
La meccanica interna di Bigtable contro, diciamo, MySQL è così dissimile da rendere difficile il confronto, e gli obiettivi previsti non si sovrappongono. Ma puoi pensare a Bigtable un po 'come un database a tabella singola. Immagina, ad esempio, le difficoltà che incontreresti se tentassi di implementare l'intero sistema di ricerca web di Google con un database MySQL - Bigtable è stato costruito attorno alla risoluzione di questi problemi.
I dataset Bigtable possono essere interrogati da servizi come AppEngine utilizzando un linguaggio chiamato GQL ("gee-kwal") che è basato su un sottoinsieme di SQL. Mancanza evidente da GQL è qualsiasi tipo di comando JOIN
. A causa della natura distribuita di un database Bigtable, l'esecuzione di un join tra due tabelle sarebbe terribilmente inefficiente. Invece, il programmatore deve implementare tale logica nella sua applicazione, o progettare la sua applicazione in modo da non averne bisogno.
"Immagina, ad esempio, le difficoltà che potresti incontrare se tentassi di implementare l'intero sistema di ricerca web di Google con un database MySQL" Quali sarebbero le difficoltà? – Moeb
Dimensioni della tabella @Amoeba, dimensione dell'indice, ridondanza, accesso simultaneo in parallelo in modo massivo e molti altri. MySQL funziona bene fino a un certo punto, ma il ridimensionamento e la condivisione su più macchine diventa un incubo di coordinamento. – tylerl
Stavo discutendo di BigTable a cena con un ingegnere di Google l'altra sera. Un punto molto importante, per me, era che i database non relazionali sono molto meglio quando si hanno più server che memorizzano i dati contemporaneamente. Pertanto, non si ottengono riferimenti duplicati e la fusione e l'esecuzione di query dei dati sono più semplici. Posso sicuramente vedere i benefici dei database non relazionali, specialmente quando si tratta di una massiccia scalabilità. – thomallen
di Google BigTable e di altri progetti simili (es: CouchDB, HBase) sono sistemi di database che sono orientati in modo che i dati siano in gran parte denormalized (vale a dire, duplicati e raggruppate).
I principali vantaggi sono: - operazioni di join sono meno costose a causa della denormalizzazione - replica/distribuzione dei dati è meno costoso a causa di indipendenza dei dati (ad esempio, se si desidera distribuire i dati tra due nodi, probabilmente vinto il problema di avere un'entità in un nodo e un'altra entità correlata in un altro nodo perché dati simili sono raggruppati)
Questo tipo di sistemi sono indicati per le applicazioni che devono raggiungere una scala ottimale (ad esempio, si aggiungono più nodi al sistema e le prestazioni aumentano proporzionalmente). In un ORM come MySQL o Oracle, quando si aggiungono più nodi se si uniscono due tabelle che non si trovano nello stesso nodo, il costo del join è più alto. Questo diventa importante quando hai a che fare con volumi elevati.
Gli ORM sono piacevoli a causa della ricchezza del modello di archiviazione (tabelle, join, fps). I database distribuiti sono belli grazie alla facilità di scala.
Ma se i dati non sono normalizzati, gli aggiornamenti sarebbero più difficili in quanto potrebbe essere necessario riflettere le stesse informazioni in più punti e, peggio ancora, se si tratta di nodi diversi. In che modo i database denormalizzati si occupano di questo? – Moeb
Erm ... Non stai confondendo il termine * ORM * con * RDBMS *? –
Diversi duplicati nella barra laterale "Correlata" lì. http: // StackOverflow.it/questions/144001/choose-a-database-type –