2010-05-10 10 views
5

Ho un'app PHP in esecuzione su un server Apache con database MySQL. In base al sottodominio a cui gli utenti accedono, li sto collegando a un database (sub1.domain.com si connette a database_sub1 e sub2.domain.com si connette a database_sub2). In questo momento ci sono 10 combinazioni sottodominio del database, ma il numero potrebbe potenzialmente crescere fino a oltre 100.Dovrei preoccuparmi delle prestazioni con connessioni a più database?

Quindi, è questo un male?

Considerando la mia situazione, è mysql_pconnect la strada da percorrere?

Grazie, e per favore fatemi sapere se ulteriori informazioni sarebbero utili.

Josh

+0

Puoi dire da quale utente o dalla richiesta quale sottodominio verranno utilizzati? –

risposta

0

E 'in parte dipende dal resto della configurazione, ma fino a quando ogni transazione coinvolge una sola connessione quindi il codice client di database deve eseguire come ci si aspetterebbe - più o meno come con un unico database, ma con più possibilità di migliorare le prestazioni dei server di database, fino al limite della larghezza di banda della rete.

Se più di una connessione partecipa a una transazione, allora probabilmente bisogno di un gestore di transazioni XA compatibile, e questi di solito portano un significativo sovraccarico delle prestazioni.

0

No, non è una brutta cosa.

È piuttosto una questione di numero di connessioni parallele in totale. Questo può essere definito da "max_connections" nelle impostazioni di mysql (di default è 151 da MySQL 5.1.15), ed è limitato dalla capacità della tua piattaforma (cioè 2048 < su Windows, più su Linux), hardware (RAM) e impostazioni di sistema (principalmente dal limite di file aperti). Può essere un collo di bottiglia se hai molti utenti paralleli, il numero di database non è importante.

Ho creato uno script che collega oltre 400 database in un'unica esecuzione (uno dopo l'altro, non in parallelo) e ho trovato mysql + php che lo gestisce molto bene (nessuna perdita di memoria significativa, nessun grande sovraccarico). Quindi presumo che non ci saranno problemi con la tua configurazione.

E, finnaly - mysql_pconnect non è generalmente buona pensare in sviluppo web se non c'è grande carico di lavoro nel collegare database di per sé. Devi gestirlo con molta attenzione per evitare problemi con max_connections, blocchi, script in sospeso ecc. Penso che pconnect abbia un uso limitato (ad esempio cron job eseguito ogni secondo o qualcosa del genere)

1

È un'app che hai scritto ?

tal caso, dal punto di vista di manutenzione puo trasformarsi in un incubo.

Cosa succede quando si altera il programma e la necessità di modificare il database?

meno che non si dispone di uno strumento di migrazione dolce per aiutarli a fare modifiche a tutti i database al nuovo schema si possono trovare se stessi in un mondo di dolore.

Mi rendo conto che potresti essere troppo avanti in questo progetto ora, ma se è stata aggiunta una piccola relazione aggiuntiva allo schema per differenziare i domini (aziende/utenti), potresti eseguirli tutti in un unico database con un piccolo sovraccarico aggiuntivo .

Se le prestazioni diventano davvero un problema (Read this) è possibile implementare Clustering o un'altra soluzione elegante, ma almeno non si avranno più di 100 database da mantenere.

Problemi correlati