2012-11-24 26 views
5

Chciałem wiedzieć, czy dobrą praktyką jest używanie SQLite jako głównego magazynu sesji lub co najmniej jako zapasowego magazynu sesji z podstawowym memcached?SQLite jako pamięć sesji

Czy możesz podać mi kilka zalet i wad?

(buduję ramy MVC dla celów edukacyjnych i myślał o różnych możliwościach i implemetations)

Odpowiedz

5

SQLite Plusy

  • szybciej niż sesje plików opartych
  • mogą być dystrybuowane gdzie sesje plików oparte są bardziej niewygodne

SQLite Wady

  • wymaga SQLit e, który tworzy zależność i coś innego do monitorowania
  • trudniej zaimplementować, że natywne sesje oparte na plikach
  • duże aplikacje mogą szybko zabić tabelę sql przez tak wiele żądań odczytu i zapisu, fragmentacji, aktualizacji indeksu, itp. zwłaszcza z prawie każdym strona trafienia że określonej tabeli

Jeszcze lepszym rozwiązaniem - memcache

Ponieważ sesje są zwykle dostępne z każdej strony hit byłoby sensu używać najszybsze mechanizm bez wszystkich napowietrznych DAT usuń warstwę, a jednocześnie pozwól jej działać w systemie rozproszonym (na przykład wiele serwerów PHP).

Użyj Memcache, który jest dobrze przetestowany w PHP i możesz nawet integrować sesje memcache, modyfikując tylko kilka ustawień php.ini lub dla dokładniejszego kontrolowania (lub używania innego oprogramowania, np. Redis), możesz stworzyć własną niestandardową sesję treser.

ten ma różne wady i zalety

Memcache Pros

  • Bardzo bardzo szybka
  • Wagi dobrze
  • Łatwy do wdrożenia przez PHP.INI

Memcache Wady

  • innej usługi, który ma potencjał do odpoczynku i wymaga monitorowania
  • Używa pamięci RAM, która jest zwykle ograniczony zasób compaired do przestrzeni na dysku twardym, a także wymaga monitorowania

Chociaż powinieneś używać innego oprogramowania monitorującego obie te rzeczy lub napisać skrypt zadań cron, który hecks usługa memcache nadal działa - ale to kolejne pytanie i odpowiedź na inny dzień. Chodzi o to, że te minusy mogą być w pewnym stopniu zmniejszone.

Dalsza lektura na tematy objęte

+0

OK Co jeśli Używam ich obu, jeśli jest to dostępne. Powiedzmy, że podstawowym jest memcache/d i kiedy zostanie utworzony nowy w SQLite i SQLite, który będzie użyty tylko wtedy, gdy memcache/d nie działa? –

+0

Sesje główne i dodatkowe? Ay !? Nie, trzymaj się tylko memcache - nie uwierzysz, ile szybciej jest on kompilowany do SQLite lub sesji opartych na plikach. Jeśli memcache nie działa, uruchom go ponownie! Pod stroną o dużym natężeniu ruchu, jeśli memcache było na poziomie 50% wykorzystania, po powrocie do SQLite najprawdopodobniej i tak się rozbije !!! Otrzymasz znacznie więcej wydajności z memcache niż sqlite, co oznacza, że ​​nie możesz na nie powrócić. Jeśli chciałbyś coś zmienić, to przynajmniej musi być oparty na pamięci (na przykład APC, ale nie rozpowszechnia się, ponieważ jest to tylko lokalna pamięć podręczna). – VBAssassin

+0

Czy nie lepiej mieć bezpieczną alternatywę? –

0

sesja bazy pliku php jest bardzo dobry i szybki, przy użyciu SQLite do przechowywania sesji tylko dodać narzut do listy zarządzanie sesją.

2

Sesje oparte na plikach są złym pomysłem, ponieważ plik zostanie zablokowany, jeśli nie zamykaj dostępu do zapisu do sesji (session_write_cl ose();). Ale dlaczego powinieneś ograniczyć siebie/serwer, kiedy musisz po prostu użyć sqlite, aby uniknąć tego problemu?

tak sqlite pro: - łatwa w użyciu (zmiana php.ini config):

session.save_handler = sqlite 
session.save_path = "/path/sessions.db" 
  • szybsze ładowanie stron (sesja może teraz pracować równolegle)
  • szybciej ajax
  • wbudowana funkcjonalność

sqlite con

  • wolniej pisać do sesji

chciałbym użyć słowa apc, ale potem muszę realizacji i obawiam się, że może skończyć się w zagadnieniach bezpieczeństwa ...

+0

Jeśli używasz APC, możesz zaszyfrować dane w sesjach, ale pochłonie to więcej czasu na wykonanie. –

+0

Dziękuję za dodanie przykładowej konfiguracji i wspomnienie o problemie 'blocking' z plikami. – kouton

Powiązane problemy