Ten post na blogu pokazuje wyniki porównania wydajności różnych silników pamięci masowej sesji z Magento i wydaje się, że doszli do wniosku, że do około 75 równoczesnych użytkowników tak naprawdę nie ma między nimi różnicy w wydajności.
Myślę, że na tych poziomach (miały około 5 transakcji na sekundę, co byłoby około 430 tys. Trafień w ciągu 12 godzin) obciążenie ogólne we wszystkich pozostałych zdominowało liczby wyników, które widzisz, ponieważ pliki / DB / Memcache / Redis z przyjemnością sobie poradzą ruch uliczny bez zerwania potu, jeśli jest właściwie stosowany.
Pozostawia to inne czynniki, takie jak skalowalność, niezawodność i bezpieczeństwo.
Najpierw chciałbym powiedzieć, że wszystko, co zagraża przechowywaniu plików, prawdopodobnie wpłynie również na wszystko inne, ponieważ osoba atakująca może następnie zmodyfikować kod aplikacji lub przynajmniej odkryć klucze i protokoły / dane dostępu do pamięci, nawet jeśli mają one tylko do odczytu dostęp. Przechowywanie plików będzie działało dobrze w przypadku witryn o niskim wolumenie, jest łatwe w konfiguracji i łatwe do uzasadnienia. O ile mówisz, że uderzyłeś w dysk, odczyt bazy danych również uderzy w dysk, a jeśli baza danych może go buforować, twój system operacyjny prawdopodobnie również buforuje plik sesji. Odczytany jest również jeden plik, a Twój system plików doskonale się do niego nadaje, jeśli znasz już jego nazwę. Jeśli korzystasz z PHP, czy wiesz, ile plików czyta system, aby obsłużyć aplikację? Minusem jest to, że możesz
Memcache jest stosunkowo szybki, a jeśli rozważasz rozwiązania klasy Memcache szerzej (Redis itp.), Są takie, które obiecują nawet trwałość odczytu pamięci w celu uzyskania szybkości, dzięki czemu uzyskasz jak najwięcej z obu światów. Są również stosunkowo łatwe do uzasadnienia, a kluczową wartością sesji jest dokładnie to, do czego zostały zaprojektowane. Czy wiesz, ile musiałbyś poświęcić na sesję, aby wypełnić jedną z nich? Tak czy inaczej, wszystkie opcje zmusią cię do kompromisu, jeśli osiągniesz ich pojemność. Dyski wypełniają się plikami (tutaj liczba i współczynnik wielkości), magazyny pamięci podręcznej zapełniają się pojemnością, a bazy danych mają ograniczoną liczbę wierszy i te same limity pojemności dyskowej, co podejście do plików. Ponadto systemy te są dystrybuowane tylko wtedy, gdy są uruchamiane w sposób rozproszony. Większość działa dobrze z konfiguracją jednego serwera. Jeśli je rozpowszechnisz, prawdopodobnie masz już rozproszone serwery sieciowe / serwery baz danych itp., Więc problemy z rozproszonym systemem z pewnością nie pojawią się w wyniku wyboru miejsca na sesję. Jednak gdy chcesz uzyskać 10-krotny ruch / pojemność itp., Osiągnięcie tego jest o wiele bardziej naturalne dzięki temu niż w przypadku schematu przechowywania plików. Niektóre magazyny kluczy / wartości pozwalają również stosunkowo łatwo przeprowadzać proste analizy danych sesji, ale większość nie zbliży cię do możliwości SQL.
Nie jestem pewien, dlaczego proponujesz, że baza danych może być bardziej niezawodna niż inne opcje, ale dostaję odwołanie do bazy danych, ponieważ Twoja aplikacja PHP prawdopodobnie już z niej korzysta. Oznacza to, że nie dodajesz innej zależności serwera i prawdopodobnie możesz ponownie użyć tego samego połączenia, którego używasz do pobierania danych sesji, aby uzyskać dane użytkownika, więc nie musisz ustanawiać jednego dla danych, jednego dla Memcache itp. Jeśli indeksujesz dobrze się spisuje, będzie też działał dość szybko i zapewnia dość prostą semantykę, którą już znasz, aby zbierać stare sesje lub nawet analizować dane sesji (nie jestem pewien, dlaczego chcesz, a jeśli nie, to prawdopodobnie nie to bardzo ważne). Skalowanie do ogromnych skal nie jest tak trywialne jak w przypadku czegoś takiego jak Redis,
Myślę, że ten wybór nie jest tak ważny na początku. Każde podejście ma wyzwania i zalety oraz rzeczy, o których musisz pomyśleć. Ogólnie rzecz biorąc, prawdopodobnie możesz uniknąć korzystania z domyślnych frameworków PHP / cokolwiek, którego używasz, lub nawet najłatwiejszej rzeczy. Jeśli później okaże się, że wybór jest zły, Twoje analizy wydajności powiedzą ci, a Ty będziesz uzbrojony w dane potrzebne do dokonania odpowiednich wyborów, biorąc pod uwagę specyfikę ruchu, jaki otrzymujesz. Z góry wszystko, co możesz rozsądnie mieć, to ogólne spekulacje.