7

Apparentemente il motivo dell'architettura BigTable ha a che fare con la difficoltà di ridimensionare i database relazionali quando si ha a che fare con l'enorme numero di server con cui Google deve gestire.Quale aspetto dei database relazionali rende difficile per loro scalare a sufficienza su servizi come Google App Engine?

Ma tecnicamente parlando cosa rende difficile la scalabilità dei database relazionali?

Nei data center aziendali di grandi aziende sembrano essere in grado di farlo con successo, quindi mi chiedo perché non è possibile farlo semplicemente a un ordine di grandezza maggiore per farlo scalare sui server di Google.

risposta

3

Oltre alla risposta di Mitch, c'è un altro aspetto: le applicazioni Web sono generalmente inadatte ai database relazionali. I database relazionali mettono l'accento sulla normalizzazione - essenzialmente, rendendo le scritture più semplici, ma leggono più duramente (in termini di lavoro svolto, non necessariamente per voi). Funziona molto bene per OLAP, situazioni di tipo di query ad-hoc, ma non così bene per le webapp, che sono generalmente fortemente ponderate a favore delle letture rispetto alle scritture.

La strategia adottata dal database non relazionali, come BigTable è il contrario: denormalizzare, per rendere legge molto più facile, a costo di fare le scritture più costosi.

+0

Concordo sul fatto che la maggior parte delle app web implicano più letture rispetto all'input dell'utente o all'aggiornamento delle app dei dati. Ma non capisco cosa intendi quando dici che le scritture sono "più facili (in termini di lavoro svolto)" in un RDBMS normalizzato? Vorrei che il datastore di App Engine è più facile in termini di lavoro fatto da una chiave univoca identifica ogni entità e un aggiornamento è equivalente a un inserto a causa del carattere simile ai dizionari del datastore. Mettendo e recuperando da un dizionario è tanto facile quanto arriva fino al lavoro svolto, penserei. – pacman

+0

@pacman: Stai dimenticando tutto il lavoro effettivamente svolto. L'Indice è il grande re del Datastore. Quando si aggiunge un'entità al datastore, si fa un enorme mole di lavoro replicare i dati in modo che se si vuole ottenere una proprietà che si può fare così in fretta. Scrive essenzialmente gli indici per ogni proprietà, in ogni entità, due volte (asc e desc), per tutti i dati memorizzati (forse non le nuove grandi Blobs, non è sicuro). Questo è ciò che richiede così tanto tempo per le scritture, ma consente anche letture veloci su una scala da capogiro. Suggerirei di ottenere un buon libro di AppEngine, in quanto è importante quando si progetta per GAE. –

6

Quando si esegue una query che implica relazioni distribuite fisicamente, è necessario trasferire tali dati per ogni relazione in un punto centrale. Questo ovviamente non si adatta bene a grandi volumi di dati.

Un server RDBMS ben configurato eseguirà la maggior parte delle sue query su hot-page in RAM, con un piccolo disco fisico o I/O di rete.

Se l'I/O di rete è vincolato, i vantaggi dei dati relazionali diminuiscono.

+0

GRAZIE! Molto più chiaro. Commento originale eliminato. –

0

Il motivo principale indicato è la posizione fisica e l'I/O della rete. Inoltre, anche le grandi aziende trattano con una frazione dei dati che i motori di ricerca gestiscono.

Pensa all'indice di un database standard, forse a un paio di punti ... i motori di ricerca hanno bisogno di una ricerca rapida di testo, su grandi campi di testo.