przykładowa aplikacja, posiadająca informacje o pracownikach i dostępna dla różnych aplikacji, takich jak lista płac i poz. Mam dane pracowników w jednej bazie danych, dane płac i pos w oddzielnych bazach danych.Singleton z wieloma bazami danych
Mam klasę połączenia z bazą danych, jak poniżej, więc za każdym razem chcę uzyskać połączenie z bazą db i po prostu zrobić $conn = Database::getInstance(db1)
.
działa świetnie, ale w zasadzie działa bardzo wolno. sprawia, że aplikacja działa bardzo wolno. Jakieś wskazówki, dlaczego tak jest, a może lepiej, ale alternatywne pomysły, aby to zrobić?
Każda pomoc będzie mile widziana
<?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;
}
}
?>
Nawiązanie połączenia z bazą danych nie powinno zająć dużo czasu i nie sądzę, że twoja aplikacja będzie "wolna" ogólnie, ponieważ masz różne bazy danych do połączenia z . Czy bazy danych są lokalne? lub na zdalnym serwerze? – Dan
bazy danych są lokalne. Obecnie używam tego podejścia i jego ładowanie zajmuje dużo czasu, w porównaniu z tym, kiedy mam wszystko w jednym db –
Możesz pomóc znaleźć konkretną linię spowalniając rzeczy przez przechwytywanie microtime() przed po pewnych liniach. Jeśli to pomoże, możesz w konkretny sposób oddzielić swój problem od linii łączącej się z bazą danych. – Dan