Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Przechowywanie zmiennych sesji w DB, Kwestia wydajności i optymalności
Sephirus
post 15.02.2012, 11:59:16
Post #1





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Witam wink.gif

Tworzę (na potrzeby projektu) trochę dziwny mechanizm trzymania sesji w bazie (wymagany przez load-balancing). Dziwny dlatego, że w niektórych kwestiach ma on działać trochę niestandardowo - ale nie o to chodzi smile.gif

Mechanizm trzymania samego identyfikatora sesji w bazie oraz działanie tego skryptu jest już sprawdzone - wszystko śmiga tak jak powinno. Nie potrzebuje z tym pomocy ale...

Trapi mnie wiele pytań dotyczących sposobu przechowywania zmiennych sesyjnych w bazie, o ile z samymi identyfikatorami nie miałem problemu (pojedynczy rekord zajmuje zawsze tyle samo, odpowiedni mechanizm GC, sprawdzone wydajnościowo i jest ok) to ciągle zastanawiam się jak rozwiązać przechowywanie zmiennych w drugiej tabeli.

Otóż można przyjąć różne silniki do tego celu - MyISAM (raczej odpada), InnoDB, Memory itd.. - każde ma swoje plusy i minusy, dodatkowo pojawia się pytanie czy serializować zmienne sesji przy wrzucaniu do bazy i deserializować przy odczycie - da to możliwość zapisywania w sesji obiektów i tablic. Bez tego wydajniejsze to będzie ale sesja ograniczy się do trzymania ciągów znaków i liczb. W przypadku MEMORY też jest problem gdyż trzeba założyć ile te dane będą zajmować (nie obsługuje typów o nieokreślonym rozmiarze)... no i właśnie... mam mętlik w głowie smile.gif

Pomożecie? Jak wy byście to zrobili (chodzi mi w zasadzie o sam koncept tabeli/bazy pod tą sesje)? Może spotkaliście się z jakimś wydajnym rozwiązaniem albo z jakimś bardzo niewydajnym i możecie coś polecić/odradzić wink.gif



--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
wookieb
post 15.02.2012, 12:08:03
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Możesz serializować (najszybsze w realizacji i wydajnościowo również). Natomiast wcale nie musisz trzymać sesji w bazie z powodu load balancingu. Możesz użyć sesji w memcache.
http://php.net/manual/en/memcached.sessions.php
Ustawiasz tylko save_path, save_handler i problem rozwiązany.


--------------------
Go to the top of the page
+Quote Post
Sephirus
post 15.02.2012, 13:43:32
Post #3





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Dzięki wookieb za cenną uwagę - masz całkowitą rację smile.gif Tak właśnie bym to zrobił gdybym mógł (co prawda wiedza się przyda gdzie szukać od razu - nie myślałem że na Memcache to aż tak proste...) ale niestety... założenie jest takie, że ma to być na bazie - chodzi o dostępy i jakieś tam operacje na tabeli z id sesji...

tak więc pozostawiam temat otwarty narazie sad.gif

Chodzi mi po prostu o to aby to zrobić i mieć spokój, ale zrobić to tak by nie zarżnęło serwera tydzień po odpaleniu ;P

wookieb - co do serializacji to wiem, że nie jest to jakoś strasznie antywydajne ani długotrwałe ale po prostu spotkałem się gdzieś z podejściem by trzymać w sesji jak najmniej - praktycznie same inty - wówczas serializacja i deserializacja przy wrzucaniu i pobieraniu z bazy była by zbędna. W memcache robi się to automatycznie tak czy siak co też wiem wink.gif


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
wookieb
post 15.02.2012, 13:55:06
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Odchudzenie sesji to zawsze ważny aspekt. Serializacja zawsze będzie Ci potrzebna bo przecież nie będziesz ograniczać schematu tabeli (a zarazem strukturę sesji) do paru pól (to dopiero będzie niewydajne). Po prostu utwórz pole session_data typu "text". Odczyt, deserializacja i gotowe snitch.gif


--------------------
Go to the top of the page
+Quote Post
Sephirus
post 16.02.2012, 09:08:47
Post #5





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Ok zastosuje do tego InnoDB - innego wyjścia nie widzę wink.gif

Dzięki.


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
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: 13.08.2025 - 23:19