2010-03-08 10 views
5

ho letto gran parte dei documenti MySQL Cluster e alcuni tutorial ma ho ancora alcune cose non chiare, e il maggiore di loro in questo momento sono:MySQL domande a grappolo

  1. Quando un nodo di dati viene riavviato (crash e risale) saranno i dati ancora disponibili? Aggiornamenti/aggiunte funzioneranno come al solito? "Sincronizzerà"?
  2. Un cluster funziona più rapidamente di quello standalone? In particolare, aggiorno le righe più volte, ma una alla volta, il che significa che la latenza della rete potrebbe avere un impatto sulle prestazioni. C'è qualche schema che posso seguire per rendere le cose più veloci, come aggiungere più nodi SQL o aggiungere nodi dati in modalità?

Per quanto riguarda la domanda # 2, un aggiornamento di una riga è la seguente sintassi:

UPDATE db_accounts.tbl_items SET items=items+%lld WHERE id_account=%u 

"id_account" è un indice (unico).

risposta

8

MySQL Cluster è un database in memoria (sebbene alcune colonne possano essere memorizzate su disco, le colonne indicizzate non possono). Se la spina viene tirata, i dati vanno via. Il processo di recupero per un nodo che ri-unisce il cluster è che estrae i dati persi da un nodo sopravvissuto (richiede collegamenti rapidi tra nodi) e quindi applica con attenzione gli eventi di replica fino a quando non raggiunge e può partecipare attivamente. Se è disponibile un backup recente, è possibile ricostruirlo da quello anziché da un altro nodo, ma il principio è lo stesso: il nodo deve essere ripopolato con i dati da zero.

MySQL Cluster è fondamentalmente una tabella hash distribuita. Il nodo NDB che contiene una particolare riga di dati è determinato da un algoritmo hash applicato alla chiave primaria. Le prestazioni aumentano con l'aggiunta di nodi, presupponendo che i dati si diffondano bene attraverso i nodi. Le prestazioni possono essere notevolmente compromesse se le query devono toccare più nodi, ad es. join complessi - ma è velocissimo per recuperare una riga specifica data la sua chiave primaria.

Ovviamente, dato che i nodi sono distribuiti, una rete lenta o congestionata influenzerà negativamente le prestazioni.

+0

Grazie mille, penso che lo farò! – Poni

+0

"Il nodo NDB che contiene una particolare riga di dati è determinato da un algoritmo hash applicato alla chiave primaria." Le righe non vengono replicate in altri nodi NDB? – metdos

5

Anche se la tabella di MySQL Cluster è in memoria, per impostazione predefinita tutte le scritture vengono verificate asincronicamente su disco (è possibile disattivarle su una base per tabella).

Se l'intero cluster non è riuscito (alimentazione al data center persa), quando viene ripristinato, i dati verranno recuperati da quei punti di controllo del disco. Il lato negativo è che dato che sono stati creati in modo asincrono, potrebbe mancare una manciata di aggiornamenti.

Se un singolo nodo di dati ha esito negativo, oltre al ripristino dalla copia del disco locale, raggiunge gli ultimi aggiornamenti dal nodo dei dati peer.

Per aggiungere un'ulteriore disponibilità elevata dei dati, è possibile utilizzare la replica asincrona MySQL in un secondo sito (dall'altra parte del mondo se necessario).