Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Przechowywanie zmiennych sesji w DB
Forum PHP.pl > Forum > Bazy danych > MySQL
Sephirus
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

wookieb
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.
Sephirus
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
wookieb
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
Sephirus
Ok zastosuje do tego InnoDB - innego wyjścia nie widzę wink.gif

Dzięki.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.