Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Jak dużą objętościowo zmienną można przechować w sesji?
skleps
post 14.12.2011, 13:20:37
Post #1





Grupa: Zarejestrowani
Postów: 142
Pomógł: 9
Dołączył: 3.03.2011

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


Jak dużą objętościowo zmienną można przechować w sesji?
Chodzi mi o to, czy mogę zserializować obiekt i między stronami przepychać go via sesje?

Obiekt może parę czy paręset kB mieć więc przyjmijmy, że będzie miał 1MB - da się toto bez problemu przechować w sesji?
Go to the top of the page
+Quote Post
Prezi2907
post 14.12.2011, 13:24:06
Post #2





Grupa: Zarejestrowani
Postów: 107
Pomógł: 4
Dołączył: 11.08.2010
Skąd: Inowrocław

Ostrzeżenie: (10%)
X----


Cytat(skleps @ 14.12.2011, 13:20:37 ) *
Jak dużą objętościowo zmienną można przechować w sesji?
Chodzi mi o to, czy mogę zserializować obiekt i między stronami przepychać go via sesje?

Obiekt może parę czy paręset kB mieć więc przyjmijmy, że będzie miał 1MB - da się toto bez problemu przechować w sesji?


Nie...

Sesje służą do przechowywania małych skrutowych informacji.

Powiedz mi co za rodzaj danych tam przechowujesz... Jakiś plik?

Łatwiej dane przenieść do pliku tekstowego lub do bazy z odpowiednimi parametrami gdzie parametry znowu zapisać do sesji. Zależy do czego wykorzystywany jest ten obiekt.
Go to the top of the page
+Quote Post
qrooel
post 14.12.2011, 13:37:23
Post #3





Grupa: Zarejestrowani
Postów: 306
Pomógł: 42
Dołączył: 25.03.2010
Skąd: Kraków

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


Obiekt można przecież serializować do pliku i w sesji umieścić tylko adres tego pliku np.

Chociaż w Javie z tego co wiem to przetrzymuje się w sesji miliard rzeczy, które mogą zajmować nawet ponad 3 MB i nie ma z tym najmniejszego problemu.

http://stackoverflow.com/questions/4649907...f-a-php-session


--------------------
Strony WWW: http://arscreo.pl
Go to the top of the page
+Quote Post
Spawnm
post 14.12.2011, 13:49:56
Post #4





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




Sesje przechowują dane w plikach.
Nie ma żadnych przeszkód w tym aby ktoś przechowywał zserializowane obiekty w sesjach.
Oczywiście pytanie czy nie spowoduje to komplikacji w działaniu aplikacji,
a kod nie zamieni się w spaghetti którego modyfikacja będzie trudna.
Go to the top of the page
+Quote Post
Prezi2907
post 14.12.2011, 14:39:15
Post #5





Grupa: Zarejestrowani
Postów: 107
Pomógł: 4
Dołączył: 11.08.2010
Skąd: Inowrocław

Ostrzeżenie: (10%)
X----


Cytat(Spawnm @ 14.12.2011, 13:49:56 ) *
Sesje przechowują dane w plikach.
Nie ma żadnych przeszkód w tym aby ktoś przechowywał zserializowane obiekty w sesjach.
Oczywiście pytanie czy nie spowoduje to komplikacji w działaniu aplikacji,
a kod nie zamieni się w spaghetti którego modyfikacja będzie trudna.


Absurd... Podejście dobre dla jednego góra kilkunastu użytkowników.
Wyobraź sobie jak zmienna nie zostanie usunięta lub ktoś rozmyśli się po załadowaniu wszystkich danych i trzyma cały czas te dane w pamięci.

Jak wejdzie 100 takich userów to może jeszcze i nie problem ale jak będzie ich z 1000 - 2000 to już masz 2gb pamięci w plecy...

Do sesji nie wrzuca się żadnych dużych wartości. A jeżeli napisanie krótkiej funkcji obsługi pliku jest trudne dla Ciebie to lepiej nie zaczynaj pisać w PHP bo po co się męczyć...

Takie operacje są nie ekonomiczne i nie profesjonalne. Napisanie do bazy zapytania wyciągającego odpowiedni plik lub dane z możliwością odwołania się nawet po roku do nich to jeden select który będzie uwarunkowany odpowiednimi parametrami określającymi go...

A co do spaghetti... Hehe... Lepszego określenia nie widziałem smile.gif Klasy , funkcje i coś takiego jak "spaghetti" nie występuje. Wystarczy pisać w miarę estetycznie.

Cytat(qrooel @ 14.12.2011, 13:37:23 ) *
Obiekt można przecież serializować do pliku i w sesji umieścić tylko adres tego pliku np.

Chociaż w Javie z tego co wiem to przetrzymuje się w sesji miliard rzeczy, które mogą zajmować nawet ponad 3 MB i nie ma z tym najmniejszego problemu.

http://stackoverflow.com/questions/4649907...f-a-php-session


I jak wyżej. Nie ma sensu przeładowywać sessji. Lepiej napisać głupi skrypt do pliku i cała zabawa... przecież w bazie możesz trzymać te pliki. Po co zaśmiecać sesje.

Jeżeli to jakaś aplikacja z logowaniem - podpisujesz go do odpowiedniego usera lub dodatkowo do jakiegoś działu
Jeżeli nie - to po prostu przypisz do jakiś odpowiednich dat , kategorii, działów. Przecież to nie jest żadna super trudna operacja...
Go to the top of the page
+Quote Post
skleps
post 14.12.2011, 14:49:35
Post #6





Grupa: Zarejestrowani
Postów: 142
Pomógł: 9
Dołączył: 3.03.2011

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


To rozwiązanie dla Panelu administracyjnego, którego będą używały max 3 osoby jednocześnie smile.gif

Chciałem po prostu przyspieszyć i zminimalizować orkę po bazie danych (bo do niej akurat odwołują się skrypty strony www dostępne dla normalnych internautów)
jak również nie odwoływać się do dysku.
Go to the top of the page
+Quote Post
Prezi2907
post 14.12.2011, 14:54:52
Post #7





Grupa: Zarejestrowani
Postów: 107
Pomógł: 4
Dołączył: 11.08.2010
Skąd: Inowrocław

Ostrzeżenie: (10%)
X----


Cytat(skleps @ 14.12.2011, 14:49:35 ) *
To rozwiązanie dla Panelu administracyjnego, którego będą używały max 3 osoby jednocześnie smile.gif

Chciałem po prostu przyspieszyć i zminimalizować orkę po bazie danych (bo do niej akurat odwołują się skrypty strony www dostępne dla normalnych internautów)
jak również nie odwoływać się do dysku.



Sesje trzymane są na serwerze na dysku. Ale dla 3 osób to spokojnie rób tą serializację.
Ale ja mam złe doświadczenie z ludźmi i sesjami gdzie przeładowali tak sesje że serwer miał dosyć smile.gif Było to 10 osób które na maksa chciały sobie przyspieszyć pracę na 3-4 oknach i na każdym osobna sesja smile.gif

Ale to był pojedynczy przypadek.
Go to the top of the page
+Quote Post
skleps
post 14.12.2011, 15:23:57
Post #8





Grupa: Zarejestrowani
Postów: 142
Pomógł: 9
Dołączył: 3.03.2011

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


Cytat(Prezi2907 @ 14.12.2011, 14:54:52 ) *
Sesje trzymane są na serwerze na dysku.


Wiem - ale odczytywac z sesji zmienna (jedno odwolanie do pliku), zeby odczytac nazwe pliku i pobrac plik z dysku (drugie odwolanie do dysku) to de factyo 2 odwolania do dysku smile.gif
A pobranie zmiennej z sesji to jedno odwolanie

Cytat(Prezi2907 @ 14.12.2011, 14:54:52 ) *
Ale ja mam złe doświadczenie z ludźmi i sesjami gdzie przeładowali tak sesje że serwer miał dosyć smile.gif Było to 10 osób które na maksa chciały sobie przyspieszyć pracę na 3-4 oknach i na każdym osobna sesja smile.gif


Akurat w tym przypadku nie ma szansy na to - pojedyncza osoba może "obrabiać" na raz tylko 1 rzecz smile.gif
Go to the top of the page
+Quote Post
nospor
post 14.12.2011, 15:31:29
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Chciałem po prostu przyspieszyć i zminimalizować orkę po bazie danych
Do takich rzeczy służy zazwyczaj cache a nie sesja

Cytat
to de factyo 2 odwolania do dysku
Bez przesady. Już nie wierzę, że piszesz tak optymalny i super wydajny skrypt, że jedno odwołanie do dysku więcej robi ci niesamowitą różnicę. A już szczególnie przy pracy "aż 3 userów".


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
skleps
post 14.12.2011, 16:24:28
Post #10





Grupa: Zarejestrowani
Postów: 142
Pomógł: 9
Dołączył: 3.03.2011

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


Cytat(nospor @ 14.12.2011, 15:31:29 ) *
Już nie wierzę, że piszesz tak optymalny i super wydajny skrypt, że jedno odwołanie do dysku więcej robi ci niesamowitą różnicę. A już szczególnie przy pracy "aż 3 userów".



Nie, raczej lenistwo własne, dzięki któremu staram sobie uprościć i przyspieszyć pracę smile.gif
Go to the top of the page
+Quote Post
nospor
post 14.12.2011, 16:27:45
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




To po co wysuwasz argumenty, które z racji lenistwa i tak nie mają żadnego znaczenia? tongue.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Fifi209
post 14.12.2011, 17:27:53
Post #12





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Cytat(Prezi2907 @ 14.12.2011, 14:39:15 ) *
Wyobraź sobie jak zmienna nie zostanie usunięta lub ktoś rozmyśli się po załadowaniu wszystkich danych i trzyma cały czas te dane w pamięci.

Znajomość działania serwera apache leży. Mi się jednak wydawało, że ustawia się czas życia sesji i właśnie od automatycznego usuwania on jest.
Cytat(Prezi2907 @ 14.12.2011, 14:39:15 ) *
Jak wejdzie 100 takich userów to może jeszcze i nie problem ale jak będzie ich z 1000 - 2000 to już masz 2gb pamięci w plecy...

2gb? Trzeba było dokładnie przeczytać temat, w dyskusji rzucił liczbą 3 użytkowników a nie 1000 czy 2000.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
skleps
post 14.12.2011, 19:14:18
Post #13





Grupa: Zarejestrowani
Postów: 142
Pomógł: 9
Dołączył: 3.03.2011

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


Cytat(nospor @ 14.12.2011, 16:27:45 ) *
To po co wysuwasz argumenty, które z racji lenistwa i tak nie mają żadnego znaczenia? tongue.gif


A jak powiesz: "szklanka jest w połowie pełna" czy "szklanka jest w połowie pusta" ? smile.gif
Był szybki pomysł, szybka wątpliwość to i szybkie pytanie poszło na forum, no i przyszła szybka odpowiedź smile.gif


Odpowiedź na swoje pytanie uzyskałem, za co dziękuję odpowiadającym smile.gif

Cytat(Fifi209 @ 14.12.2011, 17:27:53 ) *
Znajomość działania serwera apache leży. Mi się jednak wydawało, że ustawia się czas życia sesji i właśnie od automatycznego usuwania on jest.


Widziałem już drobną pomyłkę w konfiguracji, gdzie serwer nie czyścił plików sesji (dokładnie zapisywał w jednym miejscu a chciał kasować z innego smile.gif

Cytat(Fifi209 @ 14.12.2011, 17:27:53 ) *
2gb? Trzeba było dokładnie przeczytać temat, w dyskusji rzucił liczbą 3 użytkowników a nie 1000 czy 2000.


Prezi2907 pisał o 2K userów, w momencie gdy nie napisałem ile osób będzie tego używało.


Ten post edytował skleps 14.12.2011, 19:08:44
Go to the top of the page
+Quote Post
Fifi209
post 14.12.2011, 19:49:01
Post #14





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Cytat(skleps @ 14.12.2011, 19:14:18 ) *
Widziałem już drobną pomyłkę w konfiguracji, gdzie serwer nie czyścił plików sesji (dokładnie zapisywał w jednym miejscu a chciał kasować z innego smile.gif

Co ma błąd w konfiguracji do tego co ja napisałem o braku wiedzy?

Cytat(skleps @ 14.12.2011, 19:14:18 ) *
Prezi2907 pisał o 2K userów, w momencie gdy nie napisałem ile osób będzie tego używało.

Fakt, teraz zobaczyłem.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
celbarowicz
post 14.12.2011, 21:09:59
Post #15





Grupa: Zarejestrowani
Postów: 253
Pomógł: 31
Dołączył: 30.03.2009
Skąd: Szczecin

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


Macanie sesji:
  1. <?php
  2. for($i=1;$i<=1090000;$i++){$x='w'.$i;
  3. $_SESSION[$x]=$x;
  4. }
  5. //echo $_SESSION[$x]=$x;
  6. echo strlen( $_SESSION[$x]);
  7. ?>

Zmiana wartości $i lubdługości $x powoduje przerwanie skryptu. Przy w/w skrypt działa do końca. Dla $i=1900000 -> error.
Czy to coś pokazuje?
Nie badałem wielkości zmiennej sesyjnej.
Lub to:
  1. <?php
  2. $x='';
  3. for($i=1;$i<=10900000;$i++){$x.='w';
  4.  
  5. }
  6. //echo $_SESSION['w']=$x;
  7. echo strlen( $_SESSION[$x]);
  8. ?>

Jak $i zwiększymy o 0 to wywala skrypt , należy ustawić settimelimit i badać dalej.






Ten post edytował celbarowicz 15.12.2011, 09:19:26
Go to the top of the page
+Quote Post
skleps
post 14.12.2011, 21:46:31
Post #16





Grupa: Zarejestrowani
Postów: 142
Pomógł: 9
Dołączył: 3.03.2011

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


Cytat(Fifi209 @ 14.12.2011, 19:49:01 ) *
Co ma błąd w konfiguracji do tego co ja napisałem o braku wiedzy?


To była tylko dygresja, że nie należy na 100% wierzyć temu, że coś działa dokładnie tak jak powinno działać.
I zasada "ufaj, lecz sprawdzaj" jest przydatna smile.gif

Go to the top of the page
+Quote Post
Uriziel01
post 15.12.2011, 07:32:39
Post #17





Grupa: Zarejestrowani
Postów: 307
Pomógł: 37
Dołączył: 9.11.2010
Skąd: Zielona Góra

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


Jeżeli ktoś twierdzi że wielkość sesji nie ma znaczenia to najprawdopodobniej nie zna zasady jej działania. Jak wydajnie może działać serwer robiąc serialize'a i unserialize'a na ważących kilkanaście MB plikach, przy każdym zapytaniu do serwera.

Ten post edytował Uriziel01 15.12.2011, 07:32:57
Go to the top of the page
+Quote Post
Crozin
post 15.12.2011, 09:15:33
Post #18





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

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


Zacznijmy od tego, że wszelkie pytania o "możliwości" sesji należy kierować w odniesieniu do konkretnej jej implementacji. Wcale nie jest powiedziane, że mamy tutaj do czynienia z domyślną, wbudowaną w PHP implementację.

Domyślny mechanizm musi każdorazowo korzystać z dysku, a operacje odczytu i zapisu na tym nośniku są stosunkowo powolne. W dodatku mowa tutaj o plikach tekstowych tekstowych, nie binarnych. Oczywiście nie będzie specjalnej różnicy pomiędzy 30 kilobajtowym plikiem, a 2 megabajtowym, ale im więcej porcji danych musisz zapisać czy odczytać tym bardziej to medium będzie dawało się we znaki.
Z 1 megabajtowymi plikami nie powinno być najmniejszych problemów.

Cytat
Jak wejdzie 100 takich userów to może jeszcze i nie problem ale jak będzie ich z 1000 - 2000 to już masz 2gb pamięci w plec y...
No i co w tym dziwnego, że 2000 użytkowników generuje 2 GiB tymczasowych danych? A przy takiej ilości odwiedzających, o ile nie zrypaliśmy konf. serwera, mamy niemal pewność, że wszystkie niepotrzebne dane zostaną usunięte w ciągu sekund.
Cytat
Do sesji nie wrzuca się żadnych dużych wartości. A jeżeli napisanie krótkiej funkcji obsługi pliku jest trudne dla Ciebie to lepiej nie zaczynaj pisać w PHP bo po co się męczyć...
A co za różnica czy dane będą składowane w pliku sesji czy swoim własnym pliku?

@nospor: Do takich rzeczy służy zazwyczaj cache a nie sesja A kto powiedział, że sesja nie może być wykorzystywana jako miejsce składowania danych? smile.gif
@Fifi209: A co do licha ma serwer Apache do czyszczenia danych zapisanych w przedawnionych sesjach?
Go to the top of the page
+Quote Post
nospor
post 15.12.2011, 09:21:28
Post #19





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
@nospor: Do takich rzeczy służy zazwyczaj cache a nie sesja A kto powiedział, że sesja nie może być wykorzystywana jako miejsce składowania danych?
Bo widzisz Crozin, bo to wszystko zależy. Jeśli użytkownik, chce z tych danych korzystać tylko i wyłącznie w jakiejś określonej akcji a nie za każdym razem gdy wejdzie w aplikację bez różnicy na jaką akcję, no to sorki, ale bardziej optymalnym rozwiązaniem będzie cache, który będzie ładowany tylko i wyłącznie dla tej konkretnej akcji. Sesja jak wiesz będzie ładowana za każdym razem i naprawdę nie ma większego sensu ładować w niej ciągle i ciągle bardzo dużej liczby danych, jeśli z tych danych korzystamy raz na jakiś czas.
Jeśli zaś te dane, są potrzebne przy każdym odpaleniu strony, niezależnie od akcji, to pal cie licho, może być i sesja wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
skleps
post 15.12.2011, 09:50:33
Post #20





Grupa: Zarejestrowani
Postów: 142
Pomógł: 9
Dołączył: 3.03.2011

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


Jeszcze chwila a chyba zostanie ogłoszony tu dżihad, chyba muszę wyjaśnić, bo zaczyna się dyskusja o wyższości Świąt Bożego Narodzenia nad Wielkanocą .

Dane w sesji będą raptem na jednej stronie, która będzie przeładowywana. To będzie tak jakby zrobić "fakturę":
User zakłada "dokument", następnie dodaje po jednej pozycji "towaru" i po każdym dodaniu towaru strona się przeładowywuje, żeby poprzeliczać "ceny" (wiem wiem, mogę ajaxa zaprząc).
Jak uzna że jest gotowe to kliknie "generuj dokument" i w tym momencie dane trafią do bazy już na stałe, więc usunie się dane z sesji.

W sumie to liczę że dane zajmą do 10kB, ale jak wiadomo jak trafi się zdolny user to przyjmuję na idiotę 1MB (ale nigdy nie powinno się to stać).
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 24.06.2025 - 23:59