Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Singleton database konekcija

[es] :: PHP :: Singleton database konekcija

[ Pregleda: 2605 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Tudfa
Jovicevic Vladimir

Član broj: 152699
Poruke: 384
*.dynamic.sbb.rs.



+3 Profil

icon Singleton database konekcija03.02.2009. u 17:34 - pre 185 meseci
Koliko je koristan ovaj sablon kod konektovanja na bazu ?
Napravio sam svoju klasu SingletonDatabase, i od onoga sto vidim da pruza je :

- da se samo jednom napravi konekcija, a posle se uvek poziva staticka metoda koja vraca instancu na SingletonDatabase objekat.
- oslobadja visestrukih otvaranja i zatvaranja konekcija

Da li sam nesto propustio/pogresno shvatio ? I da li Singleton sablon ima i nekih mana ?
Nekako imam utisak, mozda cak i nije potrebno koristi singleton kod konektovanja, jer ne znam zasto bi neko otvorio vise konekcija nego sto je potrebno
u okviru skripta...



 
Odgovor na temu

agvozden
Aleksandar Gvozden
founder
Info-G
Beograd

Član broj: 37813
Poruke: 1123
*.adsl-a-2.sezampro.yu.

Sajt: www.gvozden.info


+68 Profil

icon Re: Singleton database konekcija03.02.2009. u 20:39 - pre 185 meseci
Ja sam razmisljao ranije na ovu temu, ali nisam bio nacisto... sada imamo i abstract klasifikaciju, ali to zahteva prepisivanje svih klasa koje koriste abstract.

A meni je sporno resenje zasto bi otvarao vise instanci za database klasu? Kako si resio pitanje koriscenja jedne konekcije? Zar takva metoda nije mogla da se upotrebi da se pozove vec inicirana klasa?

Ja koristim globalno iniciranje database klase i onda to uvucem u kontruktor svake klase koja extenduje db klasu.

S druge strane, moguce je koristiti vise konekcija, ali to ne podrazumeva konekciju na jednu bazu. Jedna baza = jedna konekcija.
Ali ukoliko koristis vise baza, normalno je da imas i vise konekcija. Mozes da vuces podatke sa vise servera i to se i koristi u velikim aplikacijama, sajtovima koji imaju uzasnu posecenost.

Mene je vise interesovalo kako postici brzinu, skalabilnost i sigurnost ovakvih klasa, ali mi je interesantna i ovakva diskusija.
 
Odgovor na temu

centaur
Beograd

Član broj: 65691
Poruke: 407
*.dynamic.sbb.rs.

ICQ: 249678363
Sajt: www.pavko.net


+24 Profil

icon Re: Singleton database konekcija03.02.2009. u 21:28 - pre 185 meseci
Sigleton pattern ima vise prednosti a naravno i po neku manu.
Osim sto onemogucuje da u gomili koda koji idu uz neki ozbiljnij projekat napravis dva puta isti DB objekat, postoji i po meni mnogo veca prednost kada se koristi singleton desing pattern.
Sve metode koje se cesto koriste stavis da budu static i onda su dostupne iz svih opsega vaznosti promenjivih.
Ne moras da prosledjujes objekat ili sta vec drugim klasama, jednostavno mozes da pozoves odakle hoces.
Ja nikada do sada nisam imao potrebu da se kacim na dve baze istovremeno tako da to sto singleton to onemogucava, ja ne vidim kao manu.

Citat:
... Mozes da vuces podatke sa vise servera i to se i koristi u velikim aplikacijama, sajtovima koji imaju uzasnu posecenost.

Najcesce nije tako. Ti uvek pozivas jedan server, a on odlucuje kom nodu ce da "prosledi" tu koneckiju
Powered by Slackware 13
 
Odgovor na temu

Tudfa
Jovicevic Vladimir

Član broj: 152699
Poruke: 384
*.dynamic.sbb.rs.



+3 Profil

icon Re: Singleton database konekcija03.02.2009. u 22:38 - pre 185 meseci
Citat:
agvozden:
A meni je sporno resenje zasto bi otvarao vise instanci za database klasu? Kako si resio pitanje koriscenja jedne konekcije?


Pa ne bih ja pravio vise instanci na istom fajlu, i zapravo za tim nema ni potrebe bilo da je u pitanju singleton ili ne.

Mislio sam na neki primer slican onom sto je centaur rekao(kada se ne koristi singleton) a taj slucaj bi izgledao ovako :

- otvorim konekciju na glavnom skriptu
- krenem da racunam potrebne podatke da bi ih prosledio na stampanje
- napravim dosta novih objekata koji mi sluze da bi dosao do tih podataka, i npr. jedan od njih u sebi otvara konekciju sa bazom da bi obavio svoj zadatak

E sad, ovde vec imamo jednu konekciju, koja nije zatvorena jer se ceka rezultat ovog objekta(koji u sebi otvara konekciju) pa tako nastaju dve konekcije bespotrebno.

Jeste da je ovde problem programerske logike, ali eto moze i to da se desi.








 
Odgovor na temu

Mister_rap
SE at Viacom

Član broj: 8822
Poruke: 2540
*.dynamic.sbb.rs.

Jabber: mister_rap@jabber.com


+21 Profil

icon Re: Singleton database konekcija03.02.2009. u 22:40 - pre 185 meseci
Db klasa moze da bude singleton upravo iz prethodno navedenih razloga, mada nikako nije obavezno...
Logicinije da bude implementiran kod config klase recimo...

Pametnije je resenje od globalnih varijabli.
Premda u php-u to nije problem kod projekcije singleton klasa treba povesti racuna o multithreading-u.
 
Odgovor na temu

Tudfa
Jovicevic Vladimir

Član broj: 152699
Poruke: 384
*.dynamic.sbb.rs.



+3 Profil

icon Re: Singleton database konekcija04.02.2009. u 00:16 - pre 185 meseci
Evo kada je Mister_rap spomenuo config jedno pitanje u vezi toga.

Posto je konstruktor singleton klasa privatan, a zeleo bih da pri kreiranju mysqli objekta mogu da prosledim konfiguracione podatke(koji mogu da se nalaze
u ini fajlu, php fajlu ili negde slicno), koje bi bilo najbolje resenje za to ?

Posto je konstruktor private, cini mi se da je jedino sto mogu to, da u samom konstruktoru dodjem do konfiguracionih podataka i zatim napravim konekciju.

Ovako mi izgleda konstruktor :
Code:

private function __construct()
{
   $this->mysqli = new mysqli('localhost','guest','guest','alfa');  
                
   if(mysqli_connect_errno()){exit(mysqli_connect_error());}
}


a ovako metoda koja vraca instancu :
Code:

public static function getInstance()
{
    if (!self::$instance instanceof self)
    {
           self::$instance = new self;
    }
    return self::$instance;
}


[Ovu poruku je menjao Tudfa dana 04.02.2009. u 10:44 GMT+1]
 
Odgovor na temu

Mister_rap
SE at Viacom

Član broj: 8822
Poruke: 2540
*.dynamic.sbb.rs.

Jabber: mister_rap@jabber.com


+21 Profil

icon Re: Singleton database konekcija04.02.2009. u 00:33 - pre 185 meseci
Ako dobro kapiram ono sto zelis onda modifikuj konstruktor, i radi ovako...

Code:

$db = TvojaDbKlasa::getInstance('localhost', 'db', 'user', 'pass');


?
 
Odgovor na temu

centaur
Beograd

Član broj: 65691
Poruke: 407
*.dynamic.sbb.rs.

ICQ: 249678363
Sajt: www.pavko.net


+24 Profil

icon Re: Singleton database konekcija04.02.2009. u 01:16 - pre 185 meseci
Mozes i da definises te obavezne parametre kao konstante pa da ih ne prosledjujes kroz konstruktor.
Cini mi se kao elegantnije resenje, jer to definises jednom za jedan projekat i cao, zasto bi se cimao da to svaki put prosledjujes kroz konstruktor.
Powered by Slackware 13
 
Odgovor na temu

Mister_rap
SE at Viacom

Član broj: 8822
Poruke: 2540
*.dynamic.sbb.rs.

Jabber: mister_rap@jabber.com


+21 Profil

icon Re: Singleton database konekcija04.02.2009. u 01:25 - pre 185 meseci
Logicnije resenje za konkretan problem, ali pitanje je da li je zadovoljan tom solucijom.

Moze to mnogo elegantnije da se resi...
 
Odgovor na temu

centaur
Beograd

Član broj: 65691
Poruke: 407
*.dynamic.sbb.rs.

ICQ: 249678363
Sajt: www.pavko.net


+24 Profil

icon Re: Singleton database konekcija04.02.2009. u 01:37 - pre 185 meseci
^npr?
Powered by Slackware 13
 
Odgovor na temu

Mister_rap
SE at Viacom

Član broj: 8822
Poruke: 2540
*.dynamic.sbb.rs.

Jabber: mister_rap@jabber.com


+21 Profil

icon Re: Singleton database konekcija04.02.2009. u 01:49 - pre 185 meseci
Idemo u off...

Ali parametre cuvamo u nekom conf fajlu (xml, ini, php, bilo sta).
Prosledimo ih jednom toj db klasi (ili cemu vec) i vozimo :)

Simple...
 
Odgovor na temu

centaur
Beograd

Član broj: 65691
Poruke: 407
93.86.62.*

ICQ: 249678363
Sajt: www.pavko.net


+24 Profil

icon Re: Singleton database konekcija04.02.2009. u 08:33 - pre 185 meseci
Sorry za off, samo rece:
Citat:
Moze to mnogo elegantnije da se resi...

pa me je interesovalo da nisam nesto propustio, kad ono, i dalje prosledjujete parametre DB klasi....
Powered by Slackware 13
 
Odgovor na temu

Tudfa
Jovicevic Vladimir

Član broj: 152699
Poruke: 384
*.dynamic.sbb.rs.



+3 Profil

icon Re: Singleton database konekcija04.02.2009. u 09:44 - pre 185 meseci
Citat:
Mister_rap:
Ali parametre cuvamo u nekom conf fajlu (xml, ini, php, bilo sta).
Prosledimo ih jednom toj db klasi (ili cemu vec) i vozimo :)


Ovo mi se cini kao najbolje resenje - konfiguracione podatke iz spoljnog izvora isparsujemo u okviru meni najinteresantnijeg __construct() i tu se otvori konekcija.
Ciljam na to da se nista ne prosledjuje kao argument konstruktora.
Posto je konstruktor private on ce se pozivati samo onda kada je pozvana metoda getInstance, i to samo jedom za vreme izvrsavanja celog skripta.

Citat:

$db = TvojaDbKlasa::getInstance('localhost', 'db', 'user', 'pass');


Ovo mi nekako ne izgleda kao najbolje resenje, mada je to vec stvar licnog ukusa - morao bih kao sto si predlozio da menjam konstruktor,
pa da prosledjujem parametre kroz getInstance itd.

Citat:
centaur: Mozes i da definises te obavezne parametre kao konstante pa da ih ne prosledjujes kroz konstruktor.
Cini mi se kao elegantnije resenje, jer to definises jednom za jedan projekat i cao, zasto bi se cimao da to svaki put prosledjujes kroz konstruktor.


Da, pomislio sam da ih definisem u okviru klase kao konstante, ali hocu da imam mogucnost menjanja tih vrednosti.

 
Odgovor na temu

centaur
Beograd

Član broj: 65691
Poruke: 407
93.86.62.*

ICQ: 249678363
Sajt: www.pavko.net


+24 Profil

icon Re: Singleton database konekcija04.02.2009. u 09:56 - pre 185 meseci
Ne definises ih kao konstane klase, vec kao konstante.
Dok nisam poceo da koristim Phing, ja sam switchovao server name i za svaki host definisao posebne vrednosti za DB i slicne stvari, tu definisao putanje do slika, js-a, css-a....
Onda kad predacujes sa dev na production server, nemas nikakvo cimanje.

Stvar je licnog afiniteta, ali prosledjivanje db parametara kroz konstruktor je , po meni, potpuno nepotrebno.




[Ovu poruku je menjao centaur dana 04.02.2009. u 11:19 GMT+1]
Powered by Slackware 13
 
Odgovor na temu

Tudfa
Jovicevic Vladimir

Član broj: 152699
Poruke: 384
*.dynamic.sbb.rs.



+3 Profil

icon Re: Singleton database konekcija04.02.2009. u 11:01 - pre 185 meseci
Citat:
centaur: Ne definises ih kao konstante klase, vec kao konstante.


Ma ne bih to nikad ni radio tako, jer je poenta da postoji mogucnost podesavanja...
Pomislio sam na to u slucaju da cu stalno koristiti iste parametre pri konekciji, a to je ipak neprihvatljivo.

Evo jedan link gde je tema rasprave bila prednosti Singletona nad globalnom konekcijom pa ako moze neko ukratko da ga iskomentarise tj. samo one stavke oznacene sa 1,2 i 3 u prvom odgovoru. To je neko naveo kao mane singleton/globalne konekcije...

http://stackoverflow.com/quest...gleton-for-database-connection

pozzZ

I hvala svima na datim odgovorima
 
Odgovor na temu

Mister_rap
SE at Viacom

Član broj: 8822
Poruke: 2540
*.dynamic.sbb.rs.

Jabber: mister_rap@jabber.com


+21 Profil

icon Re: Singleton database konekcija04.02.2009. u 12:45 - pre 185 meseci
Citat:

pa me je interesovalo da nisam nesto propustio, kad ono, i dalje prosledjujete parametre DB klasi....


Da ali akcenat je bio na rec "jednom"

Prednost ovog pristupa je sto omogucis korisniku da jednostavno promeni parametre.

@Tudufa

Sve sto je tip rekao stoji...
 
Odgovor na temu

Tudfa
Jovicevic Vladimir

Član broj: 152699
Poruke: 384
*.dynamic.sbb.rs.



+3 Profil

icon Re: Singleton database konekcija04.02.2009. u 21:44 - pre 184 meseci
@Mister_rap

Citat:

Forcing you pages to do all database connections sequentially and killing any attempts at asyncronous page loads.


jel mozes ovo malo da pojasnis, cackao sam po netu ali nisam nasao nista sto bi mi lepo razjasnilo ovo asinhrono ucitavanje stranica.

pozZ
 
Odgovor na temu

Mister_rap
SE at Viacom

Član broj: 8822
Poruke: 2540
*.dynamic.sbb.rs.

Jabber: mister_rap@jabber.com


+21 Profil

icon Re: Singleton database konekcija05.02.2009. u 12:39 - pre 184 meseci
Malo je "los" taj english ili si ti lose citirao...
U svakom slucaju on sto je htio reci je veoma prosto jer asinhroni je proces onaj koji se izvrsava "nevezano-nezavisno" od glavnog toka programa...
Ili ti neko izvrsavanje u pozadini (Ajax si sigurno koristio)
U PHP-u recimo hoces da ti skript obradjuje neki fajl upisivanje citanje, a da u isto vreme izvrsava neku drugu operaciju...

 
Odgovor na temu

[es] :: PHP :: Singleton database konekcija

[ Pregleda: 2605 | Odgovora: 17 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.