[PHP] Przewaga wydajności - baza czy pliki tekstowe?

0

Chcę, aby tworzony właśnie przeze mnie serwis był maksymalnie wydajny (w granicach rozsądku ;)). Dane trzymam w bazie mysql i staram się jak mogę ograniczać ilość i złożoność zapytań. Do konfiguracji serwisu należą np. takie rzeczy jak modele telefonów (nazwa + id), aktualnie zakodowane na stałe w config.php, niedługo bedę pisał panel do edycji.

Teraz pytanie - co będzie wydajniejsze i "lepsze" - zapis tej listy telefonów do pliku tekstowego, a potem odczyt i dzielenie po linijkach przez PHP, czy każdorazowy odczyt z bazy danych całej (!) tabeli (prawie zawsze jest potrzebna pełna lista). Zasugerujecie jakieś za i przeciw? Trochę dziwny taki "powrót do plików tekstowych", ale na mój chory chłopski rozum wydaje się to najlepszym rozwiązaniem :)

0

Jezeli baza jest na localhoscie ( w sensie - ten sam komp, co i wykonywacz php) to lepiej baza danych. Bo przeciez odczytanie informacji z bazy niejako sprowadza sie do odczytania pliku. Ale ... baza ma 'pare' dodatkowych bajerow, ktore to odczytywanie usprawniaja :) Jak baza na innym kompie, no to bym przeprowadzil testy co jest szybsze. Ale generalnie sklanialbym sie do bazy, chocby dlatego, ze przy duzej ilosci takich samych zapytan bedzie sobie wyniki cache'owac, a nie odczytywac z pliku jeszcze raz. No i nie ma problemu z parsowaniem wynikow z pliku.

0

pytanie, czy przy tak małej ilości danych warto zaprzęgać do działań mechanizmy bazy danych?

0

do małych ilości danych możesz używać sqlite, do większej mysql

0

Czy warto... Wedlug mnie warto, bo masz jeden mechanizm do obslugi wszystkiego i juz. Jak zajdzie potrzeba zmiany/dodania/usuniecia czegos to duzo latwiej po prostu usunac wpis z bazy, czy delikatnie zmienic zapytanie niz zmieniac plik i sposob parsowania. Oczywiscie mozna parsowac tak, zeby bylo odporne na zmiany, ale czy to nie jest wywazanie otwartych drzwi?

@kubARek: zalezy co rozumiesz przez 'mala' i 'wieksza'
// właśnie też wczoraj chciałem to napisać ;) - Cold

0

Podejżewam, że jeżeli działania na plikach tekstowych byłyby lepsze/szybsze/wydajniejsze to nikt nie wymysliłby bazy danych,... bo po co...!?

Ja osobiście oparłbym to na mySQLu i nawet bym sie nie zastanawiał...

johny_bravo napisał(a)

czy to nie jest wywazanie otwartych drzwi?

chyba jest...

0

Ja tylko powiem, że kiedyś miałem dla firmy lokalnej robić stronkę (zamawiający uparł się na pliki tekstowe), więc zrobiłem. Pół roku później, jakaś firma, która została wynajęta do rozbudowy serwisu wydzwaniała, że dodanie czegoś do plików komplikuje tak sprawę, że myśleli o przepisaniu jej od zera na SQL (na co z kolei, nie wiedzieć czemu, zamawiający nie wyrażał zgody :/ )

Weź pod uwagę, że rozbudowa bazy danych, nie zmienia sposobu odwołania się do informacji; rozbudowa plików zmienia i to diametralnie, bo do wartości nie możesz odwoływać się po nazwach, tylko po kolejności elementów oddzielonych separatorem. Z dodaniem wartości wtedy nie ma raczej problemu, ale z usunięciem 'kolumn' zbędnych zaczyna robić się burdel.

Zatem brnięcie w pliki tekstowe to bardzo nierozsądne posunięcie, bez względu na wymagania serwera baz danych - po prostu wybierz jakiś rozsądny.

0

ogólne informacje, że baza danych do przechowywania danych najlepsza jest to ja znam, z drugiej strony chyba (?) każdy z nas na sugestię umieszczenia obrazków w bazie danych odparłby przecząco (kilkanaście procent spadku wydajności na bazie + kilkanaście procent na php - według Zend).

Chodzi tu o konkretny problem odczytywania stałego tekstu, bez wyszukiwania, czy czytania tylko jego części - prawie równie dobrze mogły by to być dane binarne. Sorry, ale jak na razie, to przemawia do mnie tylko argument o cache - pytanie, czy cache jest w pliku na dysku, czy w RAM.

Z drugiej strony aż takie jasne to nie jest, że i to i to odczytanie pliku z dysku, ale w bazie są optymalizacje, bo poza cache i kompresją nie ma co (?) optymalizować przy takim odczycie, a transfer danych między serwerami apache i mysql kosztuje (dwie różne maszyny).

No i bazy są wymyślone przede wszystkim do wyszukiwania i zarządzania danymi, jeżeli byłyby najlepsze do przechowywania ich, to pliki binarne też najlepiej byłoby trzymać w bazie.

0

Najlepsze do przechowywania danych to sa pamieci masowe :) Macierze RAID, itp, itd. Silnik bazy jest interfejsem miedzy przechowywaniem a korzystaniem z informacji. Ma zadbac o to, zeby dostep do informacji byl bezproblemowy, gdziekolwiek jest ona przechowywana.

A wracajac do tematu. Skoro to taka niewielka ilosc informacji to nie bedzie miala wplywu na wydajnosc. Gdyby to byly gigabajty danych - wtedy byc moze mialoby to jakis skutek. Ale IMO wygodniej jest uzyc bazy wlasnie dlatego, ze w razie jakichkolwiek zmian prawdopodobnie bedziesz musial zmieniac sposob odczytu. Dla mnie takie wyjscie jest bez sensu.

0

Ja ostatnio na wlasnej skorze przekonalem sie o roznicy w wydajnosci pomiedzy mysql a plikiem tekstowym.

Majac plik tekstowy zawierajacy okolo 300 tysiecy rekordow, wyszukiwanie jednego rekordu zajmowalo ponad minute.

Po wrzuceniu danych do bazy mysql zajmuje to okolo 15 sekund. No ale z drugiej strony, plik tekstowy zajmowal 16 MB, a baza okolo 150 MB - cos za cos. Serwer to nie mocarz ale to nie ma znaczenia.

Troche offtopic (bo autor wspomnial ze danych nie jest duzo), ale takie porownanie moze byc ciekawe.

Ja na bazach danych za bardzo sie nie znam (dopiero sie ucze), ale i tak wyciagniecie danych z bazy za pomoca zapytania wydaje mi sie prostsze i bardziej niezawodne niz reczne pisanie przeszukiwania pliku tekstowego w php.

0

Ło matko, 15 sekund? Tak dużo?

0

Może indeksu nie ma albo co? Bo dla mnie też 15 sekund na bazie to trochę długo :-)

0

Heh jezeli mozna przyspieszyc to chetnie sie dowiem, bo jak mowilem jestem w tym totalny newbie.

Jedna baza, jedna tabela z 5 polami (to znaczy indeks + 5 pól) . Zapytanie standardowe SELECT * WHERE ... Ja dotychczas myslalem ze to z powodu parametrow serwera, zreszta: http://info.gosc.mine.nu :-)

Procek P 266 MHz i w dodatku caly czas na swapie jedzie bo pamieci za malo :P

0

Generalnie chodzi o to, ze indeksy sa automatycznie sortowane przy modyfikacji i jesli zachodzi potrzeba wyszukania czegos po polu na ktorym jest indeks (czyli takie np pola po WHERE) to baza leci sobie binarnie i takie wyszukiwanie trwa milisekundy.

A wracajac do tematu

prawie zawsze jest potrzebna pełna lista

Jak "prawie" to uzyj bazy, jesli mialaby to byc jakas prosta lista ktora tylko iteratujesz i ew cos do niej dodajesz (bez wzgledu na kolejnosc danych) to rzeczywiscie pliki moglyby byc wydajniejsze (ale to tez zalezy od tego jak to zaimplementujesz /zadne tam explode np/).

Poza tym cos wspomniales, ze juz uzywasz bazy, jesli tak to w porownianiu z plikami odpada ci polaczenie z baza i logowanie do niej.

0

dobra, już odpuściłem i będzie na bazie :P.

Ale i tak swoje wątpliwości mam ;). Konkretnie to samo wykonanie zapytania też kosztuje i to niemało - przy wrzucaniu kilkuset-megowego dumpa do mysqla jak używałem pojedyńczych zapytań, wlekło się niemiłosiernie. Jak zacząłem je sklejać (INSERT INTO (xx) VALUES (1),(2),(3)) wlekło się dużo szybciej :). A sama procedura szatkowania danych przed wgraniem na serwer trwa jakąś 1/50 wgrywania

1 użytkowników online, w tym zalogowanych: 0, gości: 1