Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] coś szybszego od serializacji?
Forum PHP.pl > Forum > PHP
Beynar
Zabieram się już trzeci raz do napisania cache zapytań do bazy. A dokldnie ich wyników czyli tablic.
Będą to zawsze tablice dwu-wymiarówe. Próbowałem już różnych sposobów:
- serializacji
- wlasnej serializacji czyli sam separuje i sam składam z ciągu tablice, niestety wolniejsze od klasycznej serializacji
- zapisywanie jako źródło php, potem require i wywoływanie funkcji ktora przwyroci mi tablice... niestety jakies 2-3 razy wolniejsze od serializacji
- różne kombinacje drugiego punktu, bardzo szybko moge odczytac cache za pomoca fread i przwrocenie go do tablicy jednowymiarowej, czyli oddzielenie rekordów ale nie pol wyniku wygladaloby to tak:
Kod
[0] => imie0#nazwisko0#adres0
[1] => imie1#nazwisko1#adres1
[2] => imie2#nazwisko2#adres2


"#" to moj separator. Iterowanie w calej tablicy i rozbijanie ciągów po sepratorze by stworzyc dwuwymiarowa tablice jest juz bardzo kosztowne i wychodzi na to, ze klasyczna serializacja wychodzi najszybciej, ale i tak mnie to nie-zadawala... jest to niewiele szybsze od zapytania sql.

Czy macie jakis inny, szybszy sposob niz serializacja?
franki01
A nie mozna stworzyc kodu, ktory bys dal do pliku, a nastepnie ten plik incudowal? Chodzi mi o takie cos:

  1. <?php
  2. // ..... w $result jest wynik zapytania
  3. $string = '<?php
  4. $array = array();
  5. ';
  6.  
  7. while($row = mysql_fetch_assoc($result)) {
  8. $string .= '$array[] = array(';
  9. $tmp = '';
  10.  foreach($row as $key => $value) {
  11. $tmp .= ",'".addslashes($key)."' => '".addslashes($value)."'";
  12.  }
  13. $string .= substr($tmp, 1).');
  14. ';
  15. }
  16.  
  17. $string = '?>';
  18.  
  19. $fp = fopen('plik.txt', 'w+');
  20. fputs($fp, $string);
  21. fclose($fp);
  22. ?>



Mysle ze zrozumiale smile.gif Po takim czyms, wystarczyloby zaincudowac plik.txt i w tablicy array() bylaby ta dwywymiarowa tablica. Pisane w palca, w razie bledow poprawiac smile.gif
seaquest
serializacja jest najszybsza

  1. <?php
  2. file_put_contents('cache', serialize($result));
  3. ?>


  1. <?php
  2. $result = unserialize(file_get_contents('cache'));
  3. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.