Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Duże listy
Forum PHP.pl > Forum > PHP
zordon
Witam,
chciałbym dowiedzieć się jak radzicie sobie z naprawdę dużymi listami?
Ostatnio klientka chciała dostać w panelu administracyjnym megalistę prezentującą na jednym ekranie jak najwięcej danych.
Główna tabela liczy kilkaset tysięcy rekordów, rekordy kilkadziesiąt (!) kolumn. Pani chciała sortować listę po każdej wyświetlanej kolumnie.
Wyświetlanych na stronie kolumn miało być kilkanaście, do tego również spoza głównej tabeli.

Oczywiście zaczęły się problemy wydajnościowe.
Gdyby nie konieczność sortowania po wszystkich kolumnach pobierałbym dane z innych tabel wyłącznie dla stronicowanych rekordów (mimo że stronicowanie ustawione na 100/stronę) ale przez to sortowanie musiałem zastosować kilka JOINów, które to właśnie najbardziej spowalniają zapytanie.
Cachowanie listy raczej nie wchodzi w grę, bo dane dość często się zmieniają, a kasowanie cache i generowanie go od razu dla całej listy byłoby już tragicznie wolne.
Odpowiednie założenie indeksów w bazie poprawiło wydajność, ale wciąż za mało

Wielu pewnie powie, że baza źle zaprojektowana i to przez to - bardzo możliwe, prawdopodobnie da się zrobić to lepiej. Jednak problem bardzo uogólniłem i załóżmy dla potrzeb pytania, że inaczej się "nie da" i musimy sobie jakoś poradzić z takim potworkiem.

Stosowanie widoków w bazie raczej nie poprawi wydajności? A co z procedurami? Może jakieś tabele tymczasowe?
Ciekaw jestem waszych rozwiązań w takim przypadku
athabus
Kiedyś miałem podobną sytuację, tyle że dotyczącą pojedynczych selectów z wielu tabel, gdzie proste joiny nie wystarczały, tylko były potrzebne podzapytanie etc. Ogólnie wtedy zdecydowałem się na tabelę z cache. Sam cache był obsługiwany wyzwalaczami z poziomu bazy danych.
Takie rozwiązanie sprawdza się dobrze przynajmniej tak długo, jak bazowe tabele są zmieniane z umiarkowanym natężeniem. W innym przypadku sam narzut na cachowanie może być całkiem spory. U mnie zmiany były wykonywane głównie ręcznie przez administratora, za to z cachu korzystał cały frontend, więc to się opłaciło, bo selecty na tych tabelach stanowiły >99% zapytań.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.