उदाहरण ऐप, कर्मचारी जानकारी रखने और पेरोल और पॉज़ जैसे विभिन्न अनुप्रयोगों द्वारा एक्सेस किया जा रहा है। मेरे पास एक डेटाबेस, पेरोल डेटा और प्रत्येक अलग डेटाबेस में pos में कर्मचारी डेटा है।एकाधिक डेटाबेस वाले सिंगलटन
मेरे पास डेटाबेस कनेक्शन क्लास नीचे जैसा है, इसलिए हर बार जब मैं एक डीबी से कनेक्शन प्राप्त करना चाहता हूं तो मैं $conn = Database::getInstance(db1)
करता हूं।
अच्छा काम करता है, लेकिन मूल रूप से सुपर धीमा है। ऐप को वास्तव में धीमा कर देता है। ऐसा करने के लिए वैकल्पिक विचार क्यों अभी तक बेहतर या बेहतर क्यों हैं इस पर कोई सुझाव?
किसी भी मदद की बहुत बदल रहा है यह भी आलसी लोड का उपयोग करने के बारे में
<?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;
}
}
?>
डेटाबेस में कनेक्शन बनाने में बहुत समय नहीं लगना चाहिए, और मुझे नहीं लगता कि आपका ऐप कुल मिलाकर 'धीमा' होगा क्योंकि आपके पास कनेक्ट करने के लिए अलग-अलग डीबी हैं । क्या डेटाबेस स्थानीय हैं? या रिमोट सर्वर पर? – Dan
डेटाबेस सभी स्थानीय हैं। मैं वर्तमान में इस दृष्टिकोण का उपयोग कर रहा हूं, और इसमें लोड होने में काफी समय लग रहा है, जब मेरे पास केवल एक डीबी –
में सबकुछ है, तो आप कुछ पंक्तियों के बाद microtime() को कैप्चर करके विशिष्ट लाइन धीमा करने वाली चीजों को ढूंढने में मदद कर सकते हैं। यदि आप मदद कर सकते हैं अगर आप विशेष रूप से डेटाबेस से कनेक्ट लाइन पर अपनी समस्या को अलग कर सकते हैं। – Dan