Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [inne][PHP][MySQL]Cachowanie - kilka pytań praktycznych
Userr
post
Post #1





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 27.10.2015

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


1. Powiedzmy, że chciałbym zcachować informacje, które pojawiają się w profilach użytkowników (przykładowo tych profili będzie 10 000). W każdym profilu będą 3 tabelki, a w każdej z nich po 5 wierszy. Czy wydajniej będzie trzymać informacje z tych tabelek w trzech różnych plikach cache, czy w jednym (i np. rozdzieliłbym informacje z tych tabelek pustą linią (znak ENTER'a) lub jakimś ciągiem znaków np. ##################### i później w PHP już w prosty sposób byłoby rozdzielić to za pomocą explode())?

2. Jeżeli mam w pliku cache informacje składającą się z 100 000 wierszy i chciałbym dodać nowy wiersz, to nadpisuję zawartość całego pliku cache, czy jakoś tylko dodaje na sam koniec nowy wiersz?

3. Dlaczego wczytanie z cache jest szybsze niż zapytanie z relacyjnej bazy danych (nie mówię tu o jakimś bardziej złożonym zapytaniu, które wymaga dodatkowych obliczeń - np. sortowaniu, tylko o najprostszym select - wczytaniu zawartości tabeli)? Relacyjna baza danych jest przechowywana na HDD serwera, a gdzie jest przechowywany plik cache? W jakiejś specjalnej szybkiej (skoro wczytywanie z cache jest szybsze niż z relacyjnej bazy danych) pamięci cache - jakby nazwa wskazywała (IMG:style_emoticons/default/smile.gif) ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
borabora
post
Post #2





Grupa: Zarejestrowani
Postów: 116
Pomógł: 33
Dołączył: 8.09.2014

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


należałoby zacząć od tego, że dla 10tys userów nie bedziesz potrzebował cache. kolejna sprawa to zapytanie na pewno wywoła się szybciej niż wczytanie pliku, który ma 100000 wierszy, a następnie wygrzebanie odpowiednich wartości.
zobacz na to w ten sposób... wejdź na poszczególne podstrony swojego serwisu i przypatrz się czy masz jakieś boxy w stylu:
-"top 10 uzytkowników"
-"ostatnie komentarze"
-"najnowsze artykuły"
tego typu dane mógłbyś trzymać w plikach
Go to the top of the page
+Quote Post
Userr
post
Post #3





Grupa: Zarejestrowani
Postów: 56
Pomógł: 0
Dołączył: 27.10.2015

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


Cytat(borabora @ 12.03.2017, 16:08:26 ) *
-"top 10 uzytkowników"
-"ostatnie komentarze"
-"najnowsze artykuły"
tego typu dane mógłbyś trzymać w plikach


Czyli ogólnie dane, których jest "mało", a są aktualizowane raz na jakiś czas?

Przykładowo dla "ostatnich komentarzy" - należałoby aktualizować plik gdy dodany zostanie nowy komentarz, czy np. raz na 10 minut przez skrypt wywoływany przez CRON'a?

Cytat(Pyton_000 @ 12.03.2017, 13:26:55 ) *
A [p co wrzucać do cache informacje o profilach? Aż tak często będą wyświetlane?

Cache w zależności od metody albo działa na plikach, na BD lub RAM (Redis, Memcached itd).


Profile będą wyświetlane jak użytkownik (nie musi być zalogowany) wejdzie na profil innego użytkownika - tak jak na forum (IMG:style_emoticons/default/smile.gif) Powiedzmy, że profilów będzie 10 000, a użytkowników odwiedzających stronę dziennie też 10 000 (ogólnie rzecz biorąc, czyli strona główna i wszystkie podstrony), ale ilość odwiedzeń podstron z profilami będzie raczej niewiele, więc chyba rzeczywiście nie ma sensu tego w plikach?

Na stronie będzie taki ranking uczniów wg. ocen (im lepsze oceny, tym wyżej w rankingu). Jest tu jedno ważne założenie - ranking będzie oczywiście widoczny cały czas na stronie, ale będzie aktualizowany tylko raz na dzień (powiedzmy o godzinie 0:00), czyli oceny z danego dnia będą widoczne w rankingu dopiero następnego dnia. Co byście proponowali w takiej sytuacji?

1. Założyć index na pole ocena i w zapytaniu wyświetlającym dodać warunek, żeby wyświetlane były tylko oceny do dnia wczorajszego?

  1. SELECT * FROM oceny WHERE DATA < $dzisiejsza_data ORDER BY ocena


2. Przechowywać ranking w oddzielnej tabeli „ranking”? Widziałbym to w ten sposób, że skrypt uruchamiany przez CRON'a raz na dzień o godzinie 0:00 sortowałby tabelę oceny (pewnie takim samym zapytaniem jak z pkt. 1) i nadpisywał tabelę „ranking” tym wynikiem sortowania (pewnie trzeba by było użyć truncate oraz ponownie dodać wiersze za pomocą insert). I tak posortowaną tabelę „ranking” wyświetlałbym na stronie. Przewaga takiego rozwiązanie nad cache może być taka, że powiedzmy ta tabela będzie miała z czasem 100 000 wierszy, to tak jak wspominaliście – zapytanie dla 100 000 wierszy wywoła się szybciej niż wczytanie pliku ze 100 000 wierzy.

Czy nie jest przypadkiem tak, że zarówno rozwiązanie 1. jaki i 2. będę równie dobre? (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 5.10.2025 - 10:26