![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Od dawna stosowane są mechanizmy służące do zapisywania wyników z bazy danych w plikach tekstowych, w celu przyspieszenie pracy skryptów (cash). I jest to całkiem logiczne, szczególnie w przypadku bardziej złożonych zapytań.
Jednak ostatnio, chyba wraz z pojawieniem się najnowszej wersji xmb_forum (Partagium) zwróciłem uwagę na nową tendencję: zastępowanie plików tekstowych bazą danych. W forum tym wszystkie pliki szablonów (templates) zostały umieszczone w bazie. I przyznam się szczerze, że mocno mnie to zaskoczyło. Bo choć do zalet stosowania zapisu w bazie chyba nikogo nie trzeba przekonywać (łatwość w aktualizacji, katalogowaniu, brak problemów z nadawaniem CHMOD itp.) to jednak przekonany byłem, że rozwiązanie takie musi być o wiele wolniejsze. Skłoniło mnie to do przeprowadzenia serii testów. Umieszczam tu kilka z wyników, które mam nadzieję skłonią Was do zastanowienie się nad tym tematem. Wszystkie zostały wykonane przy pomocy malutkiego skryptu zapisującego i przeliczającego wyniki, który można ściągnąć stąd: www.mStudio.nQ.pl/download/scrypty/czas/czas.zip na Windows XP, z Apachem 1,3, php 4.3 oraz MySQL 3.23 A tu jest przykład kodu testów A1. wyświetlamy zawartość małego pliku (1,4 KB) z pliku tekstowego (wyniki w sekundach): Cytat Ilość prób=20
A2. Ten sam tekst z bazy MySQL zawierającej tylko ten jeden rekord:średni czas = 0.00299039483070 max czas=0.0046200752; min_czas= 0.0020439625 suma = 0.0598078966 Cytat Ilość prób=20
A3. Taki sam tekst, lecz z tabeli zawierającej około 200 rekordów
średni czas = 0.00293679833412 (mniej niż z pliku !) max czas=0.0047850609; min_czas= 0.0023930073 suma = 0.0587359667 Cytat Ilość prób=20
średni czas = 0.00319704413414 max czas=0.0045739412 min_czas= 0.0025489330 suma = 0.0639408827 ----------------------------- B1. wyświetlamy zawartość pliku (61 KB) z pliku tekstowego (wyniki w sekundach): Cytat Ilość prób=20
B2. Ten sam tekst z bazy MySQL zawierającej tylko ten jeden rekord:
średni czas = 0. 07095720171928 max czas=0. 1114130020; min_czas= 0. 0573480129 suma = 1. 4191440344 Cytat Ilość prób=20
B3. Taki sam tekst, lecz z tabeli zawierającej około 200 rekordów
średni czas = 0. 09079620242119 max czas=0. 1551539898; min_czas= 0. 0670330524 suma = 1. 8159240484 Cytat Ilość prób=20
Podsumowanie:
średni czas = 0. 08866938948631 max czas=0. 1459870338 min_czas= 0. 0688790083 suma = 1. 7733877897 Pliki rzeczywiście zazwyczaj są szybsze, ale nie tak bardzo, jak by się mogło wydawać. Zaskakujące efekty dało również porównanie wyników MySQL. Okazało się, że wielkość bazy (przynajmniej w porównaniu 1-200) nie ma wpływu na prędkość wykonywania zapytań. Czasami wręcz (sic!) większa baza jest szybsza... Co o tym sądzicie? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Przyjaciele php.pl Postów: 398 Pomógł: 0 Dołączył: -- Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Od biedy można spróbować posłużyć się XML'em jako zamiennikiem bazy danych ale musisz wtedy obsłużyć wszystkie operacje wyszukiwania, dodawania i zamiany na poziomie php, a takie technologie jak XMLQuery są jeszcze bardzo niedojrzałe. Natomiast świetnie sprawdza się XML przechowywany w bazie danych. Do pewnego poziomu abstrakcji przechowujesz dane w polach bazy danych, a poniżej tego poziomu w XMLu (w jednym z pól bazy). Np. przechowując artykuły możesz datę publikacji, tytuł i autora przechowywać w osobnych polach, a sam artykuł z podziałem na paragrafy, sekcje, cytaty, słowa kluczowe itd. trzymać w jednym z pól w XML-u. W Oracle'u możesz nawet wydawać zapytania do wnętrza tego XML'a ale jak wiadomo na komercyjną licencję Oracle'a mało kogo stać. Postgres jeszcze tego nie umie (o MySQL'u nawet nie wspominam, bo projektanci głośno się wypowiedzieli, że nawet nie mają planów się za coś takiego brać). Mimo wszystko jest to wygodne. Można sobie wyszukać co trzeba z bazy, a potem XML + parser z php zapewnią prawidłowe formatowanie itp.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 13:00 |