Attualmente sto usando PHP PDO per accedere al mio database. Tutto funziona perfettamente e dandy. Tuttavia, aggiungerò read-replicas alla configurazione del mio server, quindi desidero modificare il mio codice di conseguenza.Come posso creare un "cambio modalità" per PHP PDO?
Il mio piano di azione corrente è quello di memorizzare una serie di dettagli delle credenziali del database. Un set di "lettura e scrittura" per il database master MySQL e qualsiasi numero di credenziali per "repliche di lettura".
Ciò che desidero fare è aggiungere un metodo alla classe PDO denominata "modalità" in cui passa una modalità, ad esempio "lettura" o (predefinito) "scrittura". Passando attraverso questo (ad es. $ Dbh-> mode ("read");), può cercare i dettagli di una replica di lettura casuale (non complicata quale) e usare quei dettagli per la connessione. Poi, una volta finita la lettura dalle mie repliche, fai un'altra $ dbh-> mode ("default") per rimetterla in modalità scrittura, per cui posso usare INSERT, UPDATE ecc.
Questo può essere fatto senza distruggere l'oggetto PDO e crearne uno nuovo? È possibile modificare i dettagli della connessione solo dopo che l'oggetto esiste già?
Finora ho il seguente (il suo a malapena qualsiasi cosa, ma figurato è un inizio).
Class SwitchablePDO extends PDO
{
public function mode($mode = "default")
{
// Use the credentials for my master read and write server by default
if($mode == "read")
{
// Use one the credentials for my read replicas (randomly choose)
}
}
}
Qualsiasi aiuto in merito sarebbe apprezzato!
È necessario? Penso che la maggior parte delle persone utilizzerebbe un paio di utenti DB per fare ciò (uno che può solo leggere e uno che ha accesso completo), quindi utilizzare una connessione DB separata per ciascun utente. – Ozzy
Tuttavia, non distribuirebbe il carico alle repliche di lettura. I dettagli della connessione sono letteralmente diversi per ogni replica di lettura. E se dovessi creare un nuovo oggetto PDO ogni volta che voglio scambiare per leggere o scrivere, ho ancora bisogno di un modo per farlo. In questo modo (si spera) mi permetterò di avere un solo oggetto/istanza di connessione della mia classe alla volta piuttosto che dover usare $ dbh_write-> query() e $ dbh_read-> query(). – Schodemeiss