Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> OOP + sesje + serializacja
adamos
post 9.02.2005, 13:57:17
Post #1





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 22.02.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Witam

Zastanawiam sie nad taka sprawa.

Tworzenie obiekty w php odbywa sie zawsze podczas odswiezenie strony.

A co jesli zastosujemy taki mechanizm.
1. Tworze obiekt
2. Serializuje go
3. Podstawiam zserializowane dane pod zmienna sesyjna.

A na poczatku skrypty zawsze robie:
1. Jezeli istnieje zmienna sesyjna, odserializowuje dane
2. Mam znowy moj obiekt

Czyli w takim wypadku obiekt tworzony jest tylko raz a kiedy go chce usunac to ja sam o tym decyduje. Co za tym idzie - mam pelne podejscie OOP - mam do dyspozycji obiekt kiedy chce oraz zgromadzone w nim dane (np. z bazy danych) - co zmniejsza ilosc odwolan i pobran z bazy.

Jest to moim zdaniem super sprawa, ale ....
O tu nasuwaja mi sie pytania questionmark.gif
Czy warto uzywac sesji do trzymanai obiektu questionmark.gif
Jesli ktos ma zablokowane cookies i prywatnosc na maxa - wszystko nie ma sesnu bo nie dziala ...

Jakie jest wasze podejscie do tej sprawy questionmark.gif?


--------------------
> Wamp5 + AdoDB + Smarty
> CherryPy + Python + Cheetah
Go to the top of the page
+Quote Post
Vengeance
post 9.02.2005, 15:19:12
Post #2





Grupa: Zarejestrowani
Postów: 657
Pomógł: 2
Dołączył: 15.08.2003
Skąd: Łódź

Ostrzeżenie: (0%)
-----


i co... pobrales 100 newsow i trzymasz je wszystkie w sesji tylko po to by potem gdzies tam moze zaoszczedzic na jednym zapytaniu ?
jak dla mnie nie ma to glebszego sensu.

optymalizacja tak! ale nie na sile ;]


--------------------
Go to the top of the page
+Quote Post
adamos
post 9.02.2005, 15:34:57
Post #3





Grupa: Zarejestrowani
Postów: 34
Pomógł: 0
Dołączył: 22.02.2004
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


no na przyklad. :-)
no ale co jest strasznie zlego jezeli w obiekcie typu contener trzymam teblice wlasnie ze 100 newsami ale tylko niezbedne dane jak id, title, a dopiero bo wybraniu jakiegos tworze obiekt news.

W OOP w Javie, C++, Delphi to jest normalne ze mozna trzymac nawet bardziej zlozone struktury - drzewa, lista a w nich inne "nawet" ciezsze obiekty.

W JSP przydziela sie czas zycie obiekty do sesji itd..
W php jakos wciaz nie moge sie przekonac do OOP jezeli obiekt jest zawsze tworzony na poczatku i zawsze trzeba go od nowa inicjowac.

Wiec czy trzymanie 100 newsow w obiekcie - w tablicyt - jest bardzo obciazajace questionmark.gif?

Czekam na dalsze sugestie.


--------------------
> Wamp5 + AdoDB + Smarty
> CherryPy + Python + Cheetah
Go to the top of the page
+Quote Post
DeyV
post 9.02.2005, 16:06:51
Post #4





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




jeśłi chodzi trzymanie 100 newsów w sessji - jest tu zupełnie zbędne.
Dlaczego? Ponieważ sessja jest tworzona dla każdego użytkownika osobno, więc w ten sposób przechowywałyś na dysku dziesiatki instancji tego samego obiektu.

Jeśli jednak zależąłoby Ci na optymalizacji tego rozwiązania, to można przeciez zserializować cały obiekt, i zapisać go na dysku serwera, w postaci pliku.
Potem każdy z użytkowników będzie korzystał z tej samej instancji obiektu, ważne tylko jest to, by przed odtworzniem zserializowanego obiektu zaincludować klasę z odpowiednim kodem.


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
NuLL
post 9.02.2005, 16:09:22
Post #5





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

Ostrzeżenie: (0%)
-----


Bo jakiego wafla to robić ?

@adamos - trzeba pamiętać o jednej rożnicy - php nie ma 512 MB RAM-u jak appsy dla Delphi czy C++. Po drugie typowy skrypt w php wykonuje się nie więcej niż załozmy 5 sekund(aplikacja może chodzić np. 5 godzin) - serializajca obiektowów jest nie potrzebna. Na tym podłożu toczy się dyskusja jak powinno wyglądać MVC dla php - chodzi mi rożnego rodzaju niuanse tejhj architektury dla php. php jest podobny skladnią do C++ ale należy pamiętać, że służy do innych celów i na pierwszy rzut oka podobne rozwiązania nasladujace inne jezyki nie zdaja egzaminu w php.


--------------------
Javascript, Coffeescript, Node.js, Mongo, CouchDb, chmury, workery & inne bajery - zycie jest zbyt krotkie aby miec nudna prace :)
Go to the top of the page
+Quote Post
hawk
post 9.02.2005, 16:43:35
Post #6





Grupa: Zarejestrowani
Postów: 521
Pomógł: 0
Dołączył: 3.11.2003
Skąd: 3city

Ostrzeżenie: (0%)
-----


Jak słusznie zauważył DeyV, sesja jest na użytkownika. Nawet w Javie nikt nie będzie wkładał 100 newsów do sesji. Trzymanie gdzieś w aplikacji ujdzie. Kurcze, masz EJB, masz ORM. No problem. Ale to przecież nie ma nic wspólnego z sesją.

I co tu ma do rzeczy Delphi lub C++?! Aplikacja desktopowa nie ma sesji...

Adams, zdecyduj się, o co Ci chodzi:
Cytat
Czy warto uzywac sesji do trzymanai obiektu questionmark.gif

Tak.
Cytat
Wiec czy trzymanie 100 newsow w obiekcie - w tablicyt - jest bardzo obciazajace questionmark.gif?

Nie.
Co nie zmienia faktu, że pakowanie newsów do sesji jest głupotą, i nijak się ma do Twoich pytań.
Go to the top of the page
+Quote Post
bela
post 9.02.2005, 21:47:18
Post #7


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

Ostrzeżenie: (0%)
-----


Ostatnio myślałem nad serwerem aplikacji i co do życia obiektów to można je wrzucić na serwer aplikacji, albo jeszcze lepiej, napisać session handler który łaczy się z serwerem aplikacji i tam trzyma te obiekty.


--------------------
Go to the top of the page
+Quote Post
DeyV
post 9.02.2005, 21:56:49
Post #8





Grupa: Zarząd
Postów: 2 277
Pomógł: 6
Dołączył: 27.12.2002
Skąd: Wołów/Wrocław




bela - ale to już ktoś wymyślił...
Robert Janeczek -> Framework Hive -> http://hive.segfault.pl/


--------------------
"Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
Go to the top of the page
+Quote Post
bela
post 9.02.2005, 22:22:54
Post #9


Administrator PHPedia.pl


Grupa: Developerzy
Postów: 1 102
Pomógł: 2
Dołączył: 14.09.2003

Ostrzeżenie: (0%)
-----


DeyV - wiem smile.gif ostatnio wlasnie się przygladalem się Hive i cześć, rzeczy mi sie nie podoba/rozwiązałbym inaczej. Pozatym jak się troche zagłebić w ten temat to powstało co najmniej kilkanaście application serwerów dla php. Wystarczy wpisać "php application server" do googla winksmiley.jpg

Dyskuja na sitepoint o 'kontenerze servletow dla php' winksmiley.jpg

BTW Najbardziej w Hive wkurza mnie to, że jest zależny od PEARa, sprobowałem go jakos zainstalować ale nie dało rady ( chyba za mało cierpliwy czasem jestem dry.gif )


--------------------
Go to the top of the page
+Quote Post
rahul
post 17.03.2011, 12:47:46
Post #10





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 5.03.2011

Ostrzeżenie: (0%)
-----


Witam, widze ze ciagniecie topic ktory takze mnie zastanawia. Zrozumialem z tego ze trzymanie zbyt wielu obiektow w sesji nie ma kompletnie sensu, a co naprzyklad jezeli mam Sesje z koszykiem na zakupy, ktora przechowuje obiekt ktory wlasnie dodalem do koszyka. Zakladajac ze uzytkownik nie kupi 100 produktow tylko 1-10 czy trzymanie informacji o tym produkcie w sesji jest zoptymalizowanym podejsciem czy lepiej wywolywac dane z bazy. Pod koniec zakupow i tak trzeba z baza sie pewnie polaczyc aby sprawdzic raz jeszczce czy produkt jest w magazynie itp.
Co myslicie ?


noob.
Go to the top of the page
+Quote Post
cudny
post 17.03.2011, 13:20:05
Post #11





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

Ostrzeżenie: (0%)
-----


Cytat(rahul @ 17.03.2011, 12:47:46 ) *
Witam, widze ze ciagniecie topic ktory takze mnie zastanawia. Zrozumialem z tego ze trzymanie zbyt wielu obiektow w sesji nie ma kompletnie sensu, a co naprzyklad jezeli mam Sesje z koszykiem na zakupy, ktora przechowuje obiekt ktory wlasnie dodalem do koszyka. Zakladajac ze uzytkownik nie kupi 100 produktow tylko 1-10 czy trzymanie informacji o tym produkcie w sesji jest zoptymalizowanym podejsciem czy lepiej wywolywac dane z bazy. Pod koniec zakupow i tak trzeba z baza sie pewnie polaczyc aby sprawdzic raz jeszczce czy produkt jest w magazynie itp.
Co myslicie ?


noob.


No właśnie, pod koniec, a nie podczas przemieszczania się po sklepie internetowym. Zaśmiecasz niepotrzebnie tak drogocenną pamięć podręczną. Przy mniejszych aplikacjach to jak chcesz możesz trzymać nawet i całą bazę danych, nawet przy 1000 odwiedzin dziennie nic się nie powinno złego dziać, ale co się dzieje przy 50000 odwiedzinach dziennie ? wszystko trzymasz sobie w powiedzmy sesjach i wyciągasz te dane z ciasteczek non stop ? za każdym odświeżeniem strony ?
Im więcej trzymasz w zmiennych, tablicach czy obiektach tym bardziej obciążasz aplikację !


--------------------
..::: Jak pomogłem to kliknij pomógł. Tak rzadko używacie tej opcji :( :::..
Go to the top of the page
+Quote Post
webdice
post 17.03.2011, 13:26:12
Post #12


Developer


Grupa: Moderatorzy
Postów: 3 045
Pomógł: 290
Dołączył: 20.01.2007




Brawo za odgrzanie 6 letniego kotleta.

Co do koszyka. Nie wystarczą Ci w sesji identyfikatory produktów? Czy pobranie ceny i nazwy produktu to tak wielkie wyzwanie dla bazy?
Go to the top of the page
+Quote Post
rahul
post 18.03.2011, 00:15:55
Post #13





Grupa: Zarejestrowani
Postów: 71
Pomógł: 0
Dołączył: 5.03.2011

Ostrzeżenie: (0%)
-----


No wlasnie tak robie,za pomoca id czerpie informacje. Moj nauczyciel jednak chcial abysmy trzymali obiekty w sesjii lecz mi czyms to smierdzialo dlatego pytam. Niestety nie potrafie zrobic jakiegos testu z pomiarem obciazenia bd przy takiej funckji jak(np koszyk) i porownac to z wynikami obciazonej sesji.Dlatego wiec pytam co bardziej jest obciazajace obiekty w sesji czy zapytania dla swiata php/mysql.
Go to the top of the page
+Quote Post
Crozin
post 18.03.2011, 00:21:21
Post #14





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Wariant z bazą danych to:
1. Odczytanie danych z bazy.
2. Utworzenie obiektów na podstawie danych z bazy.
-- Obiekt gotowy do użycia

Nawiązanie połączenia sobie darujemy bo i tak jest to zawsze wykonywane.

Wariant z sesją to:
1. Deserializacja obiektów
-- Obiekt gotowy do użycia
2. Serializacja obiektów

Odczyt i zapis danych też sobie darujemy bo to zawsze się robi (a różnica w zapisie 1 KiB, a 10 KiB nie jest istotna - chociaż to zależy od tego gdzie przechowujesz tą sesję).

No, to jak już wiesz z czym wiążą się dwa rozwiązania sprawdzenie które działa szybciej w przypadku 100 000 bazy produktów nie powinno być problematyczne?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 02:11