2011-08-27 15 views
19

Sto tentando il mio primo progetto di database su larga scala per conto mio. Ho un mysql db myisam sul server 1 con un'app php che consuma grandi quantità di vari dati. Ho mysql myisam sul server 2 con l'app php che seleziona e visualizza i dati.Consigli e tecniche di replicazione Muzak

voglio replicare questo i dati sul server di 2.

Domande:

  1. Devo cambiare di server 1 mysql db a InnoDB
  2. Potete replicare server1 InnoDB per server2 MyISAM
  3. I Sto memorizzando i media come BLOB con l'intenzione di usare la cache per scaricare lo stress sul server live. Dovrei usare la memoria del filesystem e rsync.
  4. Qualche consiglio generale di altre persone esperte?

risposta

26

Ecco cosa suggerisco in base alla mia esperienza.

  1. È possibile utilizzare un tipo di motore (MyISAM o InnoDB) per entrambi i server. Io mescolo entrambi i motori, potresti avere deadlock, problemi di transazione ecc ... e il tempo di fissarli può essere doloroso. Ho avuto problemi un po 'di tempo fa con InnoDB -> MyISAM. Ora ho usato MyISAM su tutti i server.

  2. Per la memorizzazione di supporti (come immagini, video o documenti) è possibile creare un NFS e montare una cartella come/usermedia/che entrambi i server accedono. Quindi non è necessario rsync ogni volta. Inoltre, è possibile salvare i metadati o le informazioni multimediali nel database come riferimento e in cui il file viene salvato sul disco. Nota: l'utilizzo di un BLOB per salvare i file può essere buono a seconda del supporto. Ad esempio, se si dispone di un file di circa 1 gig, potrebbe non essere una buona idea salvare sul database, ad esempio).

  3. Utilizzare un sistema di memorizzazione nella cache per recuperare i dati (come memcached). Ad esempio, se si richiedono dati e è necessario visualizzarli all'utente, cercare prima nella cache. Se non è nella cache, interrogare il database, salvarlo nella cache e visualizzarlo. La prossima volta che viene richiesta la stessa informazione, non la richiederete dal server ma dalla memoria. Questa soluzione eviterà numerose chiamate sul server Database che miglioreranno le prestazioni.

Fammi sapere se hai bisogno di ulteriore assistenza.

+0

Grazie. I file multimediali sono immagini. 3 versioni della stessa immagine in diverse dimensioni. La dimensione del file va da circa 10k a 80k e non è probabile che sia molto più di questo. Con questo in mente sarà ancora un enorme db in dimensioni. È importante? O è abbastanza difficile per il lavoro. Naturalmente memcached sarà utilizzato dal vivo. – user915831

+0

Mi piace l'idea di nfs. Ma poiché questo è un progetto personale, i miei fondi sono limitati. Ho un buon server dedicato dal vivo. In un centro dati con larghezza di banda illimitata e connessione t1. Ho un server interno in ufficio, ma è vincolato dalla connessione Internet a monte, che è circa 512up 20 MB in giù. Quindi con questa connessione nfs di iconnection sul server interno si rallenta il software che consuma, giusto? – user915831

+0

I server si trovano nello stesso centro dati? possono parlare tra loro senza VPN? controlla questo link http://how-to.linuxcareer.com/how-to-configure-nfs-on-linux. Forse puoi iniziare a memorizzare le immagini nel database poiché sono piccole e poi passare alla soluzione NFS se esegui l'aggiornamento a un media più grande. –

23

voglio raccomandare InnoDB (per operazioni, bloccaggio fila e non bloccaggio tavolo) e redis come cache molto veloce ed efficiente