Dziś jest piątek, 22 sierpnia 2008 roku (z kalendarza...)

Optymalizacja C-Z-W

Icon

30.07.2006, 17:56

Projekty

Komentarze (2)

Powrót

Prace nad prywatnym silnikiem C-Z-W osiągnęły bardzo ważny moment. Implementacja wszystkich jego funkcji została już praktycznie zakończona i przyszła odpowiednia pora na dokonanie optymalizacji. Część związana z CMS'em oparta jest na jednej, jedynej tabeli mającej formę drzewa, która odpowiednio renderowana za pomocą modułów oraz definiowania typów może być modelowana w dowolne elementy strony. Do uzyskania takich specjałów, jak system newsów z dzieleniem na strony, obiektom można ustawić parametr zwany "Wyświetlanie użytkownika", który powoduje, że podelementy będą obsługiwane we własnym zakresie.

Obsługa tego parametru pochłania dość dużo mocy. Aktualnie rozbiłem cały proces na dwa zapytania tak, aby nie przeciążyć za bardzo pięciu LEFT JOINÓW :), jednak testy wydajnościowe na zwielokrotnionej bazie wpisów Dzienników Zyxowych pokazały, że nadal powstaje problem, bo tak czy siak te 1000 ID jest ładowanych do skryptu i dopiero tam eliminowanych. Nie udało się napisać zapytania SQL, które wyeliminowałoby je już na poziomie bazy danych - zmodyfikowana metoda preorder używana do przechodzenia drzewa musi mieć trochę wsparcia ze strony jakiegoś języka programowania, aby zadanie to było wykonalne.

Po paru przemyśleniach otrzymałem dwa rozwiązania tego problemu:

  1. Napisanie specjalnego, wysokopoziomowego menedżera cache, który aktywowałby się, gdyby otrzymana w zapytaniu ilość rekordów przekroczyła setkę. Pozwoliłby on wtedy PHP na uszczuplenie zbioru o rekordy, których nie będziemy wyświetlać, a następnie scache'owałby wynik, co przy kolejnych wejściach zmniejszyłoby obciążenie i wyeliminowało jedno zapytanie. Wymaga to jednak wprowadzenia paru dodatkowych poprawek do DAO, które czyściłyby jeszcze jeden cache w przypadku modyfikacji danych.
  2. Takie przerobienie skryptu, aby w wypadku rozpoczęcia renderingu od obiektu z flagą "Wyświetlanie użytkownika", automatycznie olać wszystkie następne rekordy dzięki klauzuli LIMIT.

Optymalizacja nigdy nie powinna być lekceważonym etapem, szczególnie gdy korzystamy z niestandardowych struktur danych oraz kilkunastolinijkowych zapytań. Wtedy każda, nawet najmniejsza idea, decyduje o być albo nie być projektu na większym obciążeniu.

Powrót

Komentarze

Napisał serafin w poniedziałek, 31 lipca 2006 o 16:05

Mnie natomiast na uczelni uczono ze zeby optymalizowac trzeba miec finalny pod wzgledem funkcjonalnosci program. Dobrze napisane API pozwala na zastapienie zlych rozwiazan nowymi bez dodatkowego grzebania w kodzie :)

Napisał Zyx w poniedziałek, 31 lipca 2006 o 20:49

Toteż po to na samym początku wpisu jest kilka bardzo ważnych słów: Implementacja wszystkich jego funkcji została już praktycznie zakończona, aby mi ludzie nie pisali, że "ich natomiast gdzieś tam uczono, że...". Fajnie, że uczono, szczególnie jeśli słusznie. W C-Z-W optymalizacjom podlega DAO. Warstwę prezentacji ruszyłem tylko raz, gdyż trzeba było jeden zbędny, jak się okazało, parametr wykasować :).

Strona 1 z 1 :: 1

Skomentuj

NickInformacja
E-mailTylko do użytku wewnętrznego.
WWWNie zapomnij o http://
LayoutNapisz tu, czy widzisz dzienny czy nocny layout.
WpisFormatowanie wiki
Internauto, pamiętaj! Wolność to nie samowola - dbaj o kulturę wypowiedzi oraz dyskusji w sieci.

Na Zyxist.com panuje swoboda wyrażania opinii oraz krytyki pod dowolnym adresem. Jedyny warunek: musi być ona kulturalna i rzeczowa. Na chamstwo, prostactwo lub jawne obrażanie kogokolwiek nie ma tu miejsca i takie komentarze są bardzo szybko usuwane. Jeśli zamierzasz polemizować z treścią wpisu, wpierw uważnie ją przeczytaj.

© Tomasz "Zyx" Jędrzejewski 2005 - 2008 | Wykonanych zapytań: 2 | Serwer wirtualny zapewnia