Sunteți pe pagina 1din 10

ASUPRA OPTIMIZRII PROCESRII CERERILOR MYSQL

PENTRU CRETEREA CALITII PLATFORMELOR


E-LEARNING.


Vasile MOLDOVAN
*
Florin POPENTIU-VLADICESCU
**


The paper presents some aspects concerning the quality improvement of the script
design , using MySQL for the development of the e-Learning platforms . Also some methods
and techniques are proposed for the optimisation of the execution time for query
processing using these data bases. The performances of these methods and techniques are
illustrated by experimental results.
Key words: E-learning,Web Based Learning, query optimization, execution time,
databases.

1. Introducere

Dezvoltarea exploziv a internetului a permis extinderea acestuia si
pentru domeniul nvmntului la distant.
Aceast nou abordare a constituit nceputul unei schimbri fundamentale
a modului n care se nva, se pred sau se auto-nva, cu scopul formrii
continue a studenilor, a cror vrst nu mai constituie a barier.
Fa de nvmntul tradiional, care este organizat pe grupe de vrst,
cel on-line este axat pe subiecte. In noua viziune la acelai curs on-line, pot
participa studeni de vrste, pregtiri, si experiene profesionale diferite,
provenind din zone geografice distincte.
n esen, nvmntul la distanta (E-learning-ul) ofer accesul comod i
eficient al studenilor la informaii i cunotine de ultim ora, metode
moderne i eficiente de predare si nvare.
In aceast nou abordare studenii pot beneficia de o instruire i o
formare permanent precum i o evaluarea on-line a cunotinelor lor. n acest
sens, E-learning-ul este o alternativ la educaia permanent n societatea
informatizat de azi sau de mine.[1]
Pentru termenul de E-learning nu se poate afirma c exist un consens
clar privind nelesul intrinsec, dar in general E-learning este sinonim cu: On-
line Learning, Distance Learning sau Web Based Learning Web-Based
Training (WBT).[12]
n cele ce urmeaz, se va face referire la E-learning n sensul de Web
Based Learning, utiliznd facilitile oferite de ctre internet. Referindu-ne la
aceste sisteme putem afirma cu certitudine ca regulile generale pentru o pagin
Page 1 of 10
de web, sunt valabile att n privina realizrii ct i a exploatrii ulterioare. In
continuare vom prezenta cele 2 aspecte menionate anterior.

2. Limbajul server-side

E-learning-ul fiind bazat pe web, pentru exemplificare am ales unul
dintre posibilele limbaje, i anume cel mai rspndit , PHP-ul deoarece
sistemele dedicate acestor procese sunt dinamice.
n istoria tehnologiilor utilizate la realizarea site-urilor web, limbajul PHP
a aprut in 1994 din nevoia lui Rasmus Lerdof de a afla cte persoane i
vizualizeaz pagina de internet. El a denumit setul de scripturi create PHP,
acronimul pentru Personal Home Page. Evoluia limbajului a fost spectaculoas
n anii urmtori, dar adevratul succes a nceput s se concretizeze cnd Zeev
Suraski i Andi Gutmans i-au adus contribuia la motorul PHP, motor care
poart de la versiunea 4 a PHP numele Zend, o combinaie de litere din
prenumele creatorilor si: Zeev i Andi. [4]
Fiind open-source, PHP beneficiaz de un suport important i constant
din partea comunitii on-line, foarte numeroase, fapt care a dus la rspndirea
rapid a paginilor de internet care folosesc acest limbaj. Intre anii 2000 i 2002
numrul lor a crescut de peste 130 de ori, in timp ce numrul site-urilor bazate
pe alte tehnologii cum sunt ASP(Active Server Pages), Java Server Pages (JSP)
sau Cold Fusion s-a mrit de maxim 16 ori.[12]
Pe lng multiplele avantaje pe care le are, cum ar fi funciile multimedia,
manipularea coninutului, utilizarea variabilelor HTTP[6], cea mai
semnificativ rmne totui uurina cu care acesta lucreaz cu bazele de date.
Programatorul are la ndemn o serie de funcii dedicate pentru utilizarea
bazelor de date i astfel din codurile PHP poate apela practic toate comenzile
MySQL.

3. MySQL. Baze de date.

MySQL este cea mai folosita soluie pentru aplicaii cu baze de date.
Rspndirea pe scar larg se datoreaz n principiu, faptului c MySQL
este open-source dar si contribuiei, respectiv suportului companiei
productoare [7]. Am putea enumera o serie de firme mari care utilizeaz
popularul MySQL printre care este suficient dac re-amintim Google sau Yahoo.
Se poate afirma c un procent semnificativ dintre aplicaiile care folosesc
aceast soluie sunt bazate pe internet sau intranet, pagini de web, portaluri de
web, aplicaii client server . MySQL se poate utiliza i la aplicaii desktop , chiar
mai mult dect att, se poate folosi aproape cu toate limbajele de programare de
nivel nalt , de la .NET pn la PHP.
Page 2 of 10
Pe lng versiunea open-source[9], dac se intenioneaz utilizarea
platformei n scopuri comerciale, atunci se impune achiziionarea unei versiuni
cu licen.
Una dintre cele mai rspndite soluii, ce sta la dispoziia utilizatorului
bazelor de date este popularul PhpMyAdmin, care este realizat n ntregime in
PHP si are o interfa foarte prietenoas, ca alternativ la linia de comand
pentru executarea comenzilor MySQL[2].
PhpMyAdmin este foarte des utilizat ca i component integrant n
pachetele de administrare ale servere-lor de web (pachetele de gzduire),
mpreun cu aplicaia Cpanel.
n cazul articolului de fa au fost utilizate n tandem att PhpMyAdmin
cat i o aplicaie care ruleaz sub Windows, Navicat. Acesta are deja o serie de
faciliti privind exportul i importul de date n diferite formate i poate fi chiar
generator de query-uri[8].

4. Despre platformele E-learning.

n cazul nvmntului bazat pe internet, au aprut o serie de soluii
comerciale, dar i gratuite sub incidena licenei open-source, dezvoltate de
diferite firme sau comuniti, soluii care se pot defini mai exact prin denumirea
de Learning (Content) Management System - L(C)MS.
Un sistem de management al coninutului (SMC.) este procesul de
aprovizionare sistematic i structurat, de creare, prelucrare, administrare,
prezentare, procesare, publicare i reutilizare al coninutului [5].
Avantajele unor astfel de sisteme sunt multiple, dar poate cel mai relevant
este acest "anytime, anywhere", adic accesibil oricnd i de oriunde,
necesitnd doar un acces la internet prin intermediul unui
navigator(browser)[12] de web.

Dintre facilitile, cerinele ridicate de un astfel de sistem, se pot
meniona:
crearea de coninut - permite generarea la orice moment a unor categorii
noi de cursuri (materii), coninuturi aferente, prin importul ct mai uor al
diferitelor formate electronice (MsWord, MsPowerPoint, Pdf, ...)[12];
managementul coninutului - aceste sisteme trebuie s asigure uneltele
necesare organizrii eficiente a coninutului, trecerea la diferite versiuni,
stocarea datelor i arhivarea acestora;
compatibilitatea - un alt criteriu, menit s asigure schimbul facil de
informaii ntre astfel de sisteme;
flexibilitatea - modificri n definiiile entitilor i a relaiilor dintre
acestea nu vor necesita modificri eseniale la nivelul structurii bazei de date;
scalabilitatea - nu vor exista probleme de performant la mrirea
volumului de date procesat;
Page 3 of 10
abstractizarea - modelul trebuie s asigure gestiunea datelor pentru orice
aplicaie similar orientat spre publicarea informaiei, structura tabelelor de
baza trebuie sa fie similar.
In utilizarea bazelor de date, servere de web, sisteme(site-uri) bazate pe
web, se poate contura un scenariu limit Acest lucru se datoreaz accesrii prea
lente a bazelor de date, a timpilor de rspuns prea mari, a cerinelor greite
(fr rezultate), a creterii jurnalelor de erori si in consecin utilizatorii ncep s
fie refuzai de la conectare. Aceste neajunsuri se pot ameliora i chiar elimina,
dac sistemul n cauz este proiectat corespunztor condiiilor ulterioare de
funcionare.
Creterea calitii acestor platforme are o serie de parametri de care
aceasta caracteristic depinde n mod direct. Satisfacerea cerinelor clienilor n
acest context, se reflecta prin disponibilitatea continu a informaiilor n
vederea consultrii acestora n ct mai bune condiii. De multe ori ns acest
deziderat este foarte greu de atins n mediul internet. Dac ne gndim doar la
rspndirea pe scar larg a mai multor tipuri (standarde) de motoare de cautare
(IExplorer, Mozilla, Opera, etc.) i aici putem sublinia lipsa unui standard
general valabil pentru HTML i CSS [12]. De asemenea putem remarca
diferena dintre sistemele de operare, rezoluii i de ce nu, diferenele de code-
pages, mai exact de caractere specifice unor regiuni sau ri. De asemenea exist
in lumea virtual formate diversificate de documente, nu ntotdeauna cele
standardizate, cum ar fi pdf-ul.
Prin urmare, dac nu lum n considerare toi aceti factori, este foarte
greu s se ating un nivel de calitate ct mai ridicat.
n cadrul lucrrii de fa, se prezint unele aspecte i concluzii legate de
partea de software (ansamblul de scripturi i baze de date). Acestea sunt
rezultatul preocuprii autorilor n direcia mai sus mentionata, pentru asigurarea
unei funcionri optime, prin care s se ating nivelul de calitate necesar acestor
platforme.
Sub aspectul optimizrii acestor sisteme, n lucrarea de fa factorul de
interes este timpul de executare al scripturilor care se realizeaz pe partea de
server, informaia returnndu-se utilizatorului prin intermediul unui navigator de
internet. In continuare se prezint cteva dintre rezultatele obinute n acest sens.

5. Optimizarea procesrii

Pentru a face o analiz asupra timpilor de executare ai cerinelor MySQL
i prin intermediul script-urilor PHP, s-a creat o baza de date simbolic , de
2000 de nregistrri a utilizatorilor, de tip e-learning prezentata in Tabelul
1.




Page 4 of 10
Tabelul 1:
Coloana Tip Lungime Special
ID INT 11 Unique
NUMELE VARCHAR 255
PRENUMELE VARCHAR 255
EMAIL VARCHAR 255
TELEFON VARCHAR 255
ANUL VARCHAR 255
SECTIA VARCHAR 255
USERNAME VARCHAR 255
PAROLA VARCHAR 255

Msurarea timpilor de executare ale script-urilor rulate s-a fcut folosind
funcia microtime() din PHP, care returneaz timpul UNIX curent.
Insernd secvena de cod:
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;

la nceputul fiierelor iar secvena

$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);
la sfritul acestora, avem posibilitatea s determinm cu exactitate timpul
scurs ntre cele dou secvene. Valoarea timpului de executare al script-ului
analizat, este regsit n variabila $totaltime.
n general, nainte de a scrie orice aplicaie web, trebuie foarte bine
cunoscute cerinele i condiiile in care aceasta va fi folosit.
n cele ce urmeaz prezentm cteva dintre rezultatele obinute, prin teste,
folosind structura de baza de date ilustrata anterior.
Se pot delimita dou direcii majore prin care se reduc timpii de
executare, cnd se folosesc script-uri server-side, care lucreaz cu baze de date
i deservesc utilizatorii prin intermediul unui browser web.

6. Optimizarea liniilor de cod

Ne referim n cazul nostru la optimizarea rulrii secvenelor de program
PHP. Aceste secvene sunt imbricate n codul HTML, sau se regsesc individual,
dar oricum rezultatul este tot un cod HTML.
Page 5 of 10
Se poate afirma, ca este bine ca trecerea de la HTML la PHP n cadrul
unui script s se fac de ct mai puine ori, adic secvena de deschidere <? >
(una dintre cele patru posibile) s se reduc la minim.
Pentru a verifica practic acest lucru am msurat timpii de executare pentru
dou variante diferite ale unui script PHP, care ia anumite date din baza de date
e-learning din Tabelul 1 i le afieaz sub o form convenabila(cod HTML)
ntr-un browser.

Cazul 1. - Neoptimizat
n interiorul buclei WHILE care parcurge rezultatele primite din baza de
date, la fiecare pas se trece din PHP in HTML de mai multe ori pentru afiarea
codului HTML corespunztor rndului de tabel, astfel:

while($row=mysql_fetch_array($result))
{
?>
<tr>
<td><? echo $row['id']; ?></td>
<td><? echo $row['numele']; ?></td>
<td><? echo $row['prenumele']; ?></td>
<td><? echo $row['telefon']; ?></td>
</tr>
<?
}
?>
</table>

Cazul 2. - Optimizat
n interiorul buclei WHILE, codul HTML aferent rndului din tabel se
pune ntr-un echo, astfel trecerea de la codul PHP la HTML nu se mai
realizeaza.

while($row=mysql_fetch_array($result))
{
echo "
<tr>
<td>$row[id]</td>
<td>$row[numele]</td>
<td>$row[prenumele]</td>
<td>$row[telefon]</td>
</tr>
";
}
Page 6 of 10
?>
</table>

Rezultatele obinute pentru cele dou variante se prezint n tabelul de
mai jos mai jos.

Tabelul 2:

Nr. nregistrri Timp-caz1 [sec] Timp-caz2 [sec]
1 200 0,132285881042 0,215481119156
2 400 0,250323057175 0,233474969864
3 600 0,294636020660 0,261955022812
4 800 1,383291959760 1,307677030560
5 1000 2,022243022920 2,081826925280
6 1200 2,429026126860 2,186830997470
7 1400 2,884603977200 2,667994976040
8 1600 5,217308998110 2,755152940750
9 1800 5,420905876160 3,827739953990
10 2000 6,206202030180 5,991676092150


7. Optimizarea cererilor(query) MySql

Prezentm de asemenea rezultatele obinute pentru cazul cererii trimise
de script-ul PHP ctre MySQL, n vederea afirii datelor cu care a fost
populat[11] Prezentam tabelul utilizatori sub forma de mai jos.

Tabelul 3:
Id Numele Prenumele Telefon
1

Se pornete de la premiza c se dorete afiarea tuturor utilizatorilor care
satisfac o anumit condiie.
Greeala major in asemenea cazuri, atunci cnd avem de a face cu un
volum mare de date, este de a selecta toate nregistrrile, urmnd ca din tabloul
n care acestea sunt plasate sa se afieze numai acelea care satisfac o anumit
condiie.
Soluia optim este oferit de interogarea optim a bazei de date cu scopul
selectrii numai a acelor date care prezint interes.
n cazul de fa, am modificat nregistrrile cmpurilor anul din Tabelul
1, care reprezint utilizatorii, la jumtatea numrului de nregistrri (1000)
In acest mod valoarea coninut este 2 , deoarece se dorete afiarea acelor
utilizatori (studeni) care sunt nscrii in anul de studiu 2.( valoarea implicit
este 1).

Page 7 of 10
Cazul 1. - Neoptimizat

Cererea MySQL va selecta toate nregistrrile din Tabelul 1, dar se vor
afia doar acele rnduri(nregistrri) unde anul este egal cu 2.

Cererea are forma:
$query="SELECT * FROM utilizatori";

Iar secvena de afiare WHILE:
while($row=mysql_fetch_array($result))
{
if ($row['anul'] == 2)
{ echo "
<tr>
<td>$row[id]</td>
<td>$row[numele]</td>
<td>$row[prenumele]</td>
<td>$row[telefon]</td>
</tr>
";
}
}

Pagina cu rezultate a fost generat in 2.37645101547 secunde.

Cazul 2. - Optimizat

n acest caz cererea MySQL are forma:
$query="SELECT * FROM utilizatori WHERE anul=2 ";

Iar secvena de afiare WHILE:
while($row=mysql_fetch_array($result))
{
echo "
<tr>
<td>$row[id]</td>
<td>$row[numele]</td>
<td>$row[prenumele]</td>
<td>$row[telefon]</td>
</tr>
";
}
Page 8 of 10
Astfel, pentru optimizarea fcut, am obinut un timp de generare al
rezultatelor in 1.80704913139 secunde. Diferena fa de cererea anterioar este
de 0,569401884080.
Se poate observa, cum prin analiza atent a problemelor i alegerea
variantelor optime se pot obine diferene semnificative.
n cadrul lucrrii de fa s-a folosit ca platform de testare un calculator
personal IBM, avnd ca sistem de operare Windows 2000 Profesional + Service
Pack 4, cu pachetele necesare pentru realizarea de server web:
- Apache 2.0.48 (Win32) ca server de web
- PHP Versiunea 4.3.10 - procesor hypertext
- MySQL Server 4.1 pentru baza de date
Asupra msurtorilor efectuate cu diferite combinaii i sintaxe, atunci
cand se ia n considerare si utilizarea script-urior PHP, se pot formula unele
recomandri privind obinerea unor timpi minimi de executare pe platformele de
acest gen. (Anexa 1)

Concluzii

In cazul cererilor optimizate, am obinut un timp de generare al
rezultatelor in 1.80704913139 secunde, ctigul faa de cererea anterioara fiind
0,569401884080 secunde.
Este evident faptul c printr-o analiza atent a problemelor i alegerea
variantelor optime se pot obine avantaje semnificative.

Bibliografie

[1] M. Vlada, E-Learning i Software educaional, Conferina Naionala de
nvmnt Virtual, 2003, pag. 12 http://fmi.unibuc.ro/cniv/ , accesat la 10.01.2007
[2] Matthew Norman, Database Design Manual, PHP i MySQL, Springer 2004, pag.
199-203
[3] Betsey Bruce, Building Online Learning Applications, Peachpit Press 2002, pag.
420-446
[4] Simon Stobart, Mike Vassileich, PHP and MySQL Manual, Springer 2004, pag.
29-35
[5] Farida Hasanali, Paige Leavitt, A Guide for Your Journey to Knowledge
Management, APQC 2003, pag. 63-90
[6] Larry Edward, Php and MySQL for dinamic webpages, Peachpit Press 2003, pag.
107-112
[7] Hugh E. Williams, David Lane, Web Database Applications with PHP &
MySQL, O'Reilly 2002, pag. 110-113
[8] Ben Forta. MySQL Crash Course , Computers 2005, pag. 121-131
[9] Andrew M. St. Lauren, Understanding Open Source and Free Software
Licensing, O'Reilly 2004, pag. 1-11
[10] Larry Edward Ullman, Php and MySQL for dinamic webpages, Peachpit Press
2003, pag. 185-189
Page 9 of 10
[11] Julie C. Meloni, PHP Essentials, Second edition, Tomson Course Technology
2000, pag. 109-135
[12] E-Learning glossary - World's biggest e-Learning glossary - http://www.e-
learningguru.com/gloss.htm, accesat la 11.01.2007

Anexa 1

1. Se vor selecta, n cadrul unei fraze SELECT, doar cmpurile de interes i se va
evita folosirea SELECT *, ori de cate ori este posibil;
2. Se vor plasa cele mai semnificative argumente ct mai la dreapta posibil deoarece
MySQL interpreteaz interogrile de la dreapta la stnga;
3. Se va evite folosirea unor valori care se schimb foarte rar ca nregistrri n baza
de date. Este preferabil ca acestea s fie incluse n fiiere de unde vor fi ncrcate la nevoie;
4. Se recomanda folosirea index-urilor,[10] unde este cazul pentru a reduce timpii de
acces, mai ales la utilizarea frecvent a SELECT-urilor;
5. Se recomanda folosirea parametrului LIMIT 1; in cazul cnd se dorete selectarea
unei singure nregistrri, astfel MySQL se oprete dup ce a fost gsit nregistrarea [9];
6. Selectarea din baza de date de face utilizand: $line=mysql_fetch_array($result),
deoarece rezultatele se pot accesa n dou moduri: a) $line[0] sau b) $line['numecoloana']; in
cazul in care se opteaz pentru $line['columnname'] este de preferat s se foloseasc $line =
mysql_fetch_assoc($result), deoarece nu va mai exista nici un tablou $line[int_index];
7. Se va evita interogarea bazei de date de mai multe ori consecutiv pentru aceleai
date, este recomandabil ca rezultatele sa se salveze n variabile;
8. Se recomand pe ct posibil, folosirea valorii implicite NOT NULL, deoarece
crescnd timpul de executare, se economiseste cte un bit;
9. Se vor folosi tipurile de date strict necesare pentru a acoperi plaja acestora, nu
foarte mari, de exemplu INT poate acoperi pn la 4294967295 fr semn, lucru care de
obicei nu este necesar (MEDIUMINT sau SMALLINT este preferabil);
10. Se va evita folosirea a prea multe tag-uri <?...?> fapt care ncetineste viteza de
rulare;
11. irurile de caractere se vor pune ntre fa de deoarece PHP-ul nu trebuie s
caute dup variabile;
12. Funcia echo este mai rapida dect print;
13. Se vor iniializa valorile maxime pentru bucle, nainte de a intra n bucl i n
interiorul secvenei:
$valoare_max = 100/10;
for($i=0; $i<$ valoare_max; $i++){
// corp ciclu
}
este mai rapid dect,
for($i=0; $i<100/10; $i++){
// corp ciclu
}.

*
Asist.drd.ing., Universitatea din Oradea
**
Prof.univ.dr., Universitatea din Oradea

Page 10 of 10

S-ar putea să vă placă și