![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Prowadzil ktos z was jakies porownania wydajnosciowe w sprawie trzymania sesji w bazie vs sesja standardowa? Sa to jakies duzo roznice na niekorzysc sesji w bazie?
A jak teraz dodac do tego fakt, ze chcemy na biezaca znac aktywnych userow, to na standardowej sesji musimy dodawac dodatkowe rzeczy do bazy odnosnie zalogowanych userow i tak czy siak robic za kazdym razem odwolania do bazy. Zas przy sesji w bazie juz to wszystko nam odpada bo mamy sesje i tak w bazie i statad mozemy sobie wszystko pobrac. W tym przypadku juz tak duzej roznicy byc nie powinno. Ktos cos? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 556 Pomógł: 40 Dołączył: 20.07.2012 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
jeżeli sesja w bazie to takiej działającej na zasadzie klucz->wartość np redis, w jakiejkolwiek sql'owej to imo bardzo zły pomysł
no chyba że apka jest dla kilku/kilkudziesięciu userów to można się bawić w takie cuda ogólnie zwykła na pikach > sql'owa |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Sesja w plikach - każdy zapis/odczyt to dodatkowe i/o dla dysku;
Sesja w bazie - jeżeli ustawisz sobie tabelę/kolekcje jako "in memory", to wciąż możesz odwoływać się do tych danych ale unikasz operacji bezpośrednio na dysku. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 915 Pomógł: 210 Dołączył: 8.09.2009 Skąd: Tomaszów Lubelski/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Dodatkowo w środowiskach rozproszonych, gdzie aplikacja jest "zreplikowana" na n węzłow jest to "must-have".
-------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Sesja powinna być trzymana w takim miejscu żeby przy skalowalnej aplikacji Round Robin móc odczytać sesję. Może to być BD, może to być Redis (preferowany) albo shared storage.
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Ok, dzieki za opinie
![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 12 Dołączył: 17.09.2014 Skąd: Krasnystaw Ostrzeżenie: (0%) ![]() ![]() |
Niektóre frameworki, analizując FileStore zapisują pliki sesyjne np. w taki oto sposób
1) app/storage/sessions/39/39ebd687d09eee8ded5e0a068ff6f8ff1376da15.sess app/storage/sessions/3a/3af89014f96216b57a47fb7c5f316cb74b3b9162.sess app/storage/sessions/7b/7bf3bb4a4cc5a24e1af3ad642d48f06d77158671.sess a w nich serializowane dane. Natomiast w domyślnej natywnej sesji jest jakiś katalog tmp a w nim pliki 2) sess_ivg4t5j1k5f86ftu3mv89l1f65 sess_05md2phru9d1vihl99ic7kae55 sess_6lp60ho8lvvv9psou17h3o4pe2 i też to samo, serializacja Czyli w 1) jest to porozrzucane a właściwie to uporządkowane w tych 2 znakowych podkatalogach, tutaj nazwy plików to sha1 na bazie jakiegoś unique id sesji, może być to też md5 ale też nie tak że wszystkie pliki w jednym katalogu ale w sumie w 256 2-znakowych podkatalogach. Ktoś brał pod uwagę: 1) jeśli tych plików jest i z kilka milionów 2) ustawienia odśmiecania (np. 1%, 2% itd...) Co do bazy danych to weźmy taką tabelę:
I zapis do contents danych przy użyciu jeszcze dodatkowo base64encode I teraz tak: Jak to się wszystko ma do a) szybkości ![]() No i jeszcze weźmy pod uwagę składowanie: 1. MongoDB 2. SSDB Czy 1. jest też często stosowane? SSDB jest chyba jakąś alternatywą dla Redisa, przynajmniej tak mi się wydaje. Jakie macie tutaj doświadczenia? |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%) ![]() ![]() |
@daro wrzucanie zserializowanych danych do bazy to czysta głupota. Już takie kwiatki jak JSON jako string w mysql widziałem i odradzam to każdemu.
Postawienie mongo do sessji też jest średnim pomysłem, bo lepszy jest już redis, a przy tym sporo lżejszy. Ewentualnie memcache. |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
nie próbowałbym SSDB to jakaś dziwna chińska maszynka
![]() Mongo tak samo, jeśli da się użyc czegoś innego co już mamy i spełnia to wymagania to nie ma co mnożyć usług. No chyba że mamy mega duży ruch i potrzebujemy wydajnego rozwiązania które zastąpi obecne kulejące. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 6 378 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
@daro wrzucanie zserializowanych danych do bazy to czysta głupota. Już takie kwiatki jak JSON jako string w mysql widziałem i odradzam to każdemu. Ale zdajesz sobie sprawę że goła sesja w PHP serializuje/deserializuje automatycznie wszystkie dane zawarte w $_SESSION? -------------------- |
|
|
![]()
Post
#11
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Goła tak, customowa nie musi ale i tak nie widzę powodu żeby tego nie robić
![]() |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 88 Pomógł: 12 Dołączył: 17.09.2014 Skąd: Krasnystaw Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 342 Pomógł: 15 Dołączył: 30.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
@daro wrzucanie zserializowanych danych do bazy to czysta głupota. Już takie kwiatki jak JSON jako string w mysql widziałem i odradzam to każdemu. Postawienie mongo do sessji też jest średnim pomysłem, bo lepszy jest już redis, a przy tym sporo lżejszy. Ewentualnie memcache. No właśnie mam pytanie odnośnie pierwszego. Czemu to jest złe? kiedyś się zastanawiałem czy warto zapisać do mysql zserializowaną tablicę (mniej rekordów) a potem deserializować.. ale w sumie doszedłem jakoś do wniosku, że lepiej walnąć 100 rekordów niż jeden z tablicą, choć nie pamiętam co mnie przekonało do tego. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 21.06.2025 - 08:21 |