![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 58 Pomógł: 0 Dołączył: 18.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
poszukuje dodatku do PDO umożliwiającego łączenie się z bazą danych dopiero gdy jest ono naprawdę potrzebne i jakieś dane się faktycznie pobierze (podobno ma coś takiego Doctrine). Ogólnie chcę zastosować cache wygenerowanego html'a (i tu wykorzystuje cache w Smarty) i cache zapytań do bazy danych (np na podstawie cache Nospora, który wykorzystać chce np w zapytań ajax'owych, do których nie będę już zaprzęgał Smarty), a co za tym idzie wielokrotnie nawet takie samo połączenie z bazą będzie niepotrzebne. Dodatkowo taki dodatek mógłby liczyć ilość wykonanych zapytań do bazy czy czas ich wykonywania. W obiektówce jestem początkujący. Gdy taką nakładkę zrobię przez dziedziczenie połączenie będzie nawiązywane automatycznie i tak kiedy utworzę klasę pochodną? Aby moja klasa przypuśćmy myPDO, aby działała tak jak chce musiała by zawierać wszystkie metody takie jak PDO i w momencie wykorzystania którejś z nich od razu najpierw sprawdzała by czy połączenie już istnieje i jeśli nie najpierw je tworzyła. Pytanie czy mój tok myślenia jest dobry? Może coś takiego już istnieje tylko nie znalazłem? Doctrine nie wiem czy jest sens tutaj wykożystywać, a co najważniejsze uczyć go się dla tego celu? Może jakiś inny sposób? Pozdrawiam ! |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Doctrine DBAL (nie mylić z ORM-em)?
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 58 Pomógł: 0 Dołączył: 18.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Z tego co przejrzałem, Doctrine DBAL chyba nie wprowadza dużych zmian co do kożystania z samego PDO, reszta metod wygląda identycznie poza kilkoma nowymi?
1. Rozumiem, że obiekt PDO też będzie tworzony dopiero gdy będzie potrzebne pobranie danych z bazy, a więc jak bym tego nie robił w takim przypadku nie wystąpią błędy przy przekazaniu obiektu pdo?
2. Jak z używaniem cache? Nie mogę sie doszukać. Chyba już w tym przypadku potrzebował bym całego ORM? 3. Może jakieś inne pomysły jak OPD? |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
1. Jeżeli przekazujesz "czysty" obiekt PDO to nie masz żadnej dodatkowej kontroli nad jego działaniem. Musiałbyś przekazywać obiekt Doctrine\DBAL\Connection.
2. Doctrine'owski DBAL to jedynie warstwa abstrakcji nad połączeniem z bazą danych realizowanym przez PDO - tak więc cache dla wyników zapytań nie leży w gestii tego narzędzia. |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Tworzysz instancje PDO dopiero wtedy kiedy wykonujesz jakieś zapytanie, poprzez swoją nakładkę, dopiero kiedy takie zapytanie zostanie przekazane, tj twój obiekt zostanie gdzieś wykorzystany, dopiero zanim przekazane zostanie zapytanie do PDO, dopiero wtedy sprawdzasz czy istnieje instancja PDO. A taki przykładowy kod mógłby wyglądać tak:
IMO nie wiem po co ci tworzyć połączenie dopiero jak jest potrzebne. Połączenie z bazą danych nie wiele cię kosztuje, jeżeli chodzi o zasoby, także nie wiem skąd takie pomysły ![]() |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@by_ikar: Bo połączenie z bazą danych jest kosztowne. Powinno się jeszcze nadpisać: beginTransaction(), exec(), getAttribute(), getAvailableDrivers(), inTransaction(), prepare(), quote(), setAttribute(), a w przypadku innych wyrzucić wyjątek.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Tak tak, wiem, to jest przykład, o czym wspomniałem. Kosztowne może i jest, ale czy aż tak bardzo? W specyficznych miejscach może to być przydatne, na średnich lotów stronie, nie wydaje mi się aby to było jakoś specjalnie przydatne.. Aczkolwiek fakt, jest to jakaś opcja w miejscach gdzie nie operujemy danymi z bazy i ta baza jest nam zbędna. Hmm, w swojej "nakładce" na PDO, akurat dziedziczę PDO, żeby właśnie nie przepisywać tych wszystkich metod, ale sam się nad takim wyjściem zastanowię..
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 58 Pomógł: 0 Dołączył: 18.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
@by_ikar: Dokładnie o coś takiego mi chodziło, mówiąc o rozszerzeniu PDO. Zachowa swoją budowę, a jedynym "problemem" będzie nadpisanie każdej metody w PDO metodą o takiej samej nazwie w mojej klasie.
Jednak dużo czytałem i w wielu miejscach polecają Doctrine. Jednak mam takie pytanie. Skrypt chciał bym zoptymalizować pod serwer wirtualny i czy cache z doctrine będzie dostępne na takim serwerze? W grę wchodzi tutaj chyba jedynie standardowe cache na plikach? Czy na doctrine to osiągnę (w dokumentacji mowa jest o: APC, XCache, memcache)? |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.07.2025 - 07:14 |