exemple application, ayant des informations sur les employés et étant consulté par différentes applications comme la paie et pos. J'ai les données des employés dans une base de données, les données de paie et pos dans des bases de données distinctes chacun. J'ai une classe de connexion de base de données comme ci-dessous, donc chaque fois que je veux obtenir une connexion à une base de données, je fais juste $conn = Database::getInstance(db1)
.Singleton avec plusieurs bases de données
fonctionne très bien, mais est super lent essentiellement. rend l'application très lente. Des conseils sur pourquoi c'est ou mieux encore des idées alternatives pour le faire?
toute aide sera grandement appréciée
<?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;
}
}
?>
La connexion à la base de données ne devrait pas prendre beaucoup de temps, et je ne pense pas que votre application soit globalement "lente" car vous avez différents DB à connecter . Les bases de données sont-elles locales? ou sur un serveur distant? – Dan
bases de données sont tous locaux. J'utilise actuellement cette approche, et cela prend beaucoup de temps à charger, par rapport à quand j'ai tout en un seul –
Vous pouvez aider à trouver la ligne spécifique en ralentissant les choses en capturant microtime() avant certaines lignes. Si cela peut vous aider si vous pouvez spécifiquement isoler votre problème à la ligne de connexion à la base de données. – Dan