Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Co jest bardziej wydajne?
Forum PHP.pl > Forum > PHP
batman
Witam

Właśnie doszedłem do takiego etapu w tworzeniu frameworka, że bez pomocy z zewnątrz się nie obejdzie winksmiley.jpg
Napisałem klasę do obsługi danych pobieranych z zewnętrznego źródła danych (baza danych, xml, plik tekstowy, itd). Mam jednak problem - co będzie bardziej wydajne.

Dla przykładu:
Mam w tabeli 10 000 wierszy. By móc zastosować sortowanie lub stronicoanie na stronie muszę "przemielić" całą tabelę, co znacznie obciąża serwer. Z drugiej strony, jeśli wyciągnę wszystko z bazy i zapiszę do tablicy, wówczas będzie to zajmować mnóstwo zasobów. Ponadto sortowanie tak dużej tablicy, też zajmie sporo czasu.

Jak to ugryźć? Co jest bardziej wydajne - sortowanie po stronie bazy danych, czy tablicy w php? Stronicowanie przy użyciu "limit" (MySQL, PostgreSQL) czy też wyciąganie danych z ogromnej tablicy?
mike
Cytat(batman @ 19.09.2006, 02:55:49 ) *
Mam w tabeli 10 000 wierszy. By móc zastosować sortowanie lub stronicoanie na stronie muszę "przemielić" całą tabelę, co znacznie obciąża serwer.
Myślisz złymi kategoriami.
10 000 to żadna ilość dla bazy danych. Dostaw ze dwa zera to pogadamy o duzysz tabelach.

Cytat(batman @ 19.09.2006, 02:55:49 ) *
Jak to ugryźć? Co jest bardziej wydajne - sortowanie po stronie bazy danych, czy tablicy w php?
Przy aplikacjach bazodanowych, nie ważne czy w php czy w innym języku jest jedna zasada. Jeśli jakies operacje są możliwe do wykonania po stronie bazy danych, to nalezy je tam wykonać.

Możesz to przyjąć jako dogmat i przestać się zastanawiać.
batman
Zdaję sobie sprawę, że 10 000 wierszy to mało. Napisałem tyle, by co poniektórzy nie zaśmiecali mi wątku pisząć. "Milion wierszy?" winksmiley.jpg

A z sortowaniem danych to chodziło mi o to, że mam klasę Recordset, która zawiera metody do operowania danymi dostarczonymi przez klasę Connection. Klasa Recordset "nie wie", czy dane pochdzą z bazy danych, plików xml, ini, itd.

Zastanawiam się czy aplikacja taka będzie wydajna. Obecnie używam do stronicowania zapytań sql, ale wolałby raz wyciągnąć dane, a potem operować tylko na nich, bez konieczności kolejnego ich pobierania. Takie coś może się udać, jeśli aplikacja będzie napisana przy pomocy ajaxa. Jednak obawiam się, że takie rozwiązanie szybko zużyje całą dostępną pamięć.
SongoQ
@batman Co do bazy danych to index zalatwi wszystko. Jesli chesz zrobic klase ktora bedzie przezroczysta na dane (DB czy XML, .....) to tak naprawde musisz stworzyc wiele klass obslugujacych rozne warstwy dostepu do danych i tylko implementowac odpowiedni interfejs. Gdzie sort czy inne rzeczy tak naprawde dla roznych klass beda robily rozne rzeczy.
batman
Tak mam zrobioe w obecnej chwili. Chciałem tylko przrzucić sortowanie i stronicowanie klasy odpowiedzialnej za operowanie na danych, a nie tak jak jest teraz, czyli w klasie, która te dane pobiera. Pozostanę jednak przy aktualnym rozwiązaniu, ponieważ przy bardzo dużych bazach danych zaczyna brakować pamięci na bardziej zaawansowane operacje winksmiley.jpg Tak więc problem zorwiązał się sam.
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.