![]() |
![]() |
![]()
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) ? |
|
|
![]() |
![]()
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 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 56 Pomógł: 0 Dołączył: 27.10.2015 Ostrzeżenie: (0%) ![]() ![]() |
-"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? 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?
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) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 10:26 |