Salut,
Am un buton care face SELECT pe o tabela cu 38 cimpuri si 1600 inregistrari. Cum se poate optimiza, adica doar prima data sa faca SELECT si urmatoarele apelari sa le ia din memorie ? Asta e valabil si pentru alte tabele cu volume mai mari de date. Multumesc.
Optimizare SELECT cu Cache
-
- Mesaje:430
Optimizare SELECT cu Cache
MarPlo
Mesaje:4343
Salut
Eu folosesc un fisier cache salvat pe server, care contine datele prelucrate din select.
Cam asa:
- Numele fisierului "nume_select.htm" depinde de Select-ul care se face; cate un fisier cache pentru fiecare Select diferit.
Acel fisier cache e sters (cu unlink() ) cand se modifica datele in mysql (la insert /update /delete).
Eu folosesc un fisier cache salvat pe server, care contine datele prelucrate din select.
Cam asa:
Cod: Selectaţi tot
$file_cache ='cache/nume_select.htm'; //path and name of file with cached data
//if $file_cache not exists, or it is older than 1 hour, gets data from mysql
//else, from cache
if(!file_exists($file_cache) || (time() - filemtime($file_cache)) >3600){
$re_data ='contains final data from mysql';
file_put_contents($file_cache, $re_data); //store final data in $file_cache for next requests
}
else $re_data = file_get_contents($file_cache);
//the rest of code that uses data from $re_data
Acel fisier cache e sters (cu unlink() ) cand se modifica datele in mysql (la insert /update /delete).
andras
Mesaje:430
Apare roare de conversie array - string
Am facut asa:
Am gresit undeva?
Cod: Selectaţi tot
Notice: Array to string conversion in C:\xampp\htdocs\cms\include\modelselect.php on line 18
Cod: Selectaţi tot
<?php
$file_cache ='../cache/select'.$clasa.'.htm';
if(!file_exists($file_cache) || (time() - filemtime($file_cache)) >3600){
$rows = $conn->sqlExec($re); // face SELECT-ul din tabela
file_put_contents($file_cache, $rows);
}
else $rows = file_get_contents($file_cache);
?>
MarPlo
Mesaje:4343
Pai nu poti sa salvezi un array asa cum e intr-un fisier, se converteste in tip sir (string), indicat in format json, apoi se salveaza ca sir pe server.
Sistemul de retinere date in fisiere cache e util cand reduci numarul de apelari si executii de functii pe server. Ce rost are sa salvezi tot rezultatul dintr-un Select in fisier text si apoi sa-l iei de acolo si sa-l transformi iar in array, cand poti mai simplu sa apelezi o functie care face iar acel Select.
Pe acest site folosesc sistem de cache la pagini (cu date in format json) nu pentru a salva un intreg Select si atat; ci in acel cache salvez datele paginii rezultate din mai multe Select-uri si prelucrari ale datelor returnate, ca sa nu se mai faca acele Multe operatiuni la fiecare accesare a paginii.
De exemplu, fisierul cache pt. o pagina de site ('nume_pagina.json") arata asa:
Se reduc astfel o multime de operatiuni la accesarea paginii lund datele din cache deja definite pt. pagina. Daca ar fi vorba de unul sau doua Select-uri fara alte prelucrari, asi lasa asa, fara sa complic codul.
- Revenind la eroarea "Array to string conversion", dupa ce datele Selectate sunt prelucrate si definite intr-un array, acel array il salvez ca sir json in cache, iar la citire il transform si folosesc iar ca array. Cam asa:
- Sistemul de cache e o idee buna de aplicat cand se simplifica mai multe operatiuni la accesari repetate, nu cand Doar complica codul.
Sistemul de retinere date in fisiere cache e util cand reduci numarul de apelari si executii de functii pe server. Ce rost are sa salvezi tot rezultatul dintr-un Select in fisier text si apoi sa-l iei de acolo si sa-l transformi iar in array, cand poti mai simplu sa apelezi o functie care face iar acel Select.
Pe acest site folosesc sistem de cache la pagini (cu date in format json) nu pentru a salva un intreg Select si atat; ci in acel cache salvez datele paginii rezultate din mai multe Select-uri si prelucrari ale datelor returnate, ca sa nu se mai faca acele Multe operatiuni la fiecare accesare a paginii.
De exemplu, fisierul cache pt. o pagina de site ('nume_pagina.json") arata asa:
Cod: Selectaţi tot
{
"title": "Titlu pagina...",
"desc": "Descrier pagina ...",
"menu_top": "Cod html Meniu in header",
"menu_side": "Cod html Meniu lateral",
"cnt": "Cod html cu continutul din Body",
"footer": "Cod html cu meniu si alte date fixe din Footer"
}
- Revenind la eroarea "Array to string conversion", dupa ce datele Selectate sunt prelucrate si definite intr-un array, acel array il salvez ca sir json in cache, iar la citire il transform si folosesc iar ca array. Cam asa:
Cod: Selectaţi tot
$file_cache ='cache/page_name.json'; //path and name of file with cached data
//if $file_cache not exists, or it is older than 1 hour, gets data from mysql
//else, from cache
if(!file_exists($file_cache) || (time() - filemtime($file_cache)) >3600){
// Selects and other Data processing..
$re_data =['title'=>'Titlu..', 'desc'=>'Descriere..', 'etc'=>'etc..']; //array with page data
file_put_contents($file_cache, json_encode($re_data)); //store page data in $file_cache in json format
}
else $re_data = json_decode(file_get_contents($file_cache), true); //gets array with page data from cache
//the rest of code that adds data from $re_data in Template and builds the page
Subiecte similare
- Setare valori din array in select tag
JavaScript - jQuery - Ajax Primul mesaj
Salut am un array cu orele de functionareUltimul mesaj
$data = array (
'0400' => '04:00 AM',
'0430' => '04:30 AM',
'0500' => '05:00 AM',
'0530'...
Testeaza urmatorul cod.
Daca ceva mai trebuie schimbat, incearca si tu sa modifici dupa cum stii, in functie de ce vrei sa obtii.
Open:...