app di esempio, con informazioni sui dipendenti e accesso a diverse applicazioni come buste paga e pos. Ho i dati dei dipendenti in un database, i dati del libro paga e pos in database separati ciascuno.Singleton con più database
ho una classe di connessione al database come di seguito, quindi ogni volta che voglio ottenere una connessione a un db faccio solo $conn = Database::getInstance(db1)
.
funziona alla grande, ma è fondamentalmente molto lento. fa funzionare l'app molto lentamente. Qualche consiglio sul perché è così o meglio ancora idee alternative per fare questo?
qualsiasi aiuto sarà molto apprezzato
<?php
class Database {
private $db;
static $db_type;
static $_instance;
private function __construct($db){
switch($db) {
case "db1":
try{
$this->db = new PDO("mysql:host=" . DB_HOST . ";dbname=" . DB_NAME, DB_USER, DB_PASSWORD);
}
catch(PDOException $e){
print "Error!: " . $e->getMessage() . "<br />";
die();
}
break;
case "db2":
try{
$this->db = new PDO("mysql:host=" . DB_HOST_2 . ";dbname=" . DB_NAME_2, DB_USER_2, DB_PASSWORD_2);
}
catch(PDOException $e){
print "Error!: " . $e->getMessage() . "<br />";
die();
}
break;
}
self::$db_type = $db;
}
private function __clone(){}
static function getInstance($db_type){
if(!(self::$_instance) || $db != self::$db_type){
self::$_instance = new self($db_type);
}
return self::$_instance;
}
}
?>
Non ci vuole molto tempo per stabilire una connessione al database, e non penserei che la tua app sarebbe "lenta" nel complesso perché hai diversi DB da connettere a . I database sono locali? o su un server remoto? I database – Dan
sono tutti locali. Attualmente sto usando questo approccio e il suo caricamento richiede parecchio tempo rispetto a quando ho tutto in un solo db –
Puoi aiutare a trovare la linea specifica che rallenta le cose catturando microtime() prima dopo certe linee. Se può essere d'aiuto se è possibile isolare in modo specifico il problema sulla linea che si collega al database. – Dan