[ mika @ 02.02.2007. 11:03 ] @
Pozdrav drugari. Imam jednu logičku nedoumicu oko konekcije na (mysql) bazu po modelu singleton patterna. Kod je sledeći:

Code:

class DB {
    private static $_singleton;
    private $_connection;

    private function __construct(){
            $this->_connection = mysql_connect("servername","username", "password");
    }
    public static function getInstance(){
        if (is_null (self::$_singleton)) {
            self::$_singleton = new DB();
        }
        return self::$_singleton;
    }
}

     //main program   

    $db = DB::getInstance();


Dakle, kao što se zna, singleton pattern onemogućava višestruko instanciranje, već (u ovom slučaju) uvek vraća jedan te isti resource link za bazu.

Ako uzmemo u obzir sledeći scenario: web aplikacija sa stotinak aktivnih korisnika, koji u diskretnim vremenskim intervalima pretražuju bazu, upisuju u nju, i pregledaju tabele.

Pitanje:Da li je dovoljno svim korisnicima dostaviti jedan:
$db = DB::getInstance();
...i ne razmišljati dalje o konekciji na bazu, ili je potrebno svakom korisniku dodeliti poseban resource link (tj. svakom korisniku instancirati novi objekat koji se konektuje na bazu)?


Napominjem da bi se podaci o sesiji pojedinačnog korisnika čuvali standardnim PHP session mehanizmom.
[ bzero @ 02.02.2007. 11:50 ] @
Code:

$this->_connection = mysql_connect("servername","username", "password");


Kada se koristi na ovaj nacin mysql_connect() funkcija pri prvom pozivu otvara konekciju na bazu i vraca resource, a pri svakom sledecem pozivu sa istim parametrima, ne otvara novi link, nego vraca prethodno otvoreni resource link. To radi na nivou samog php-a i u vecini slucajeva nemas potrebe da razmisljas o tome. Ukoliko zelis da se pri svakom pozivu otvara novi link (sto je opet u vecini normalnih slucajeva nepotrebno i/ili nepozeljno) mozes da kao cetvrti parametar mysql_connect() stavis true.
[ mika @ 02.02.2007. 11:56 ] @
Dakle, upravo to me interesovalo. So, pre svakog C/R/U/D zahteva prema bazi (Create/Retreive/Update/Delete) ja odradim jedno:
$db = DB::getInstance();
... i ne razmišljam?

Varijanta o kojoj sam razmišljao bila je i korišćenje persistent konekcija, ali kad bolje razmislim... čemu to?


HVALA!