Podręcznik użytkownika CodeIgniter wersja 2.2.1


Klasa cache'owania bazy danych

Klasa cache'owania bazy danych pozwala na cache'owanie Twoich zapytań do plików tekstowych, w celu redukcji obciążenia bazy danych.

Ważne:  Ta klasa jest inicjalizowana automatycznie przez driver bazy danych, kiedy cache'owanie jest włączone. NIE ładuj tej klasy ręcznie.

Zauważ również, że:  Nie wszystkie funkcje są dostępne podczas używanie cachu. Przeczytaj tę stronę uważnie.

Włączanie cache'owania

Cache włącza się w trzech krokach:

Raz uruchomione, cache'owanie będzie działało automatycznie za każdym razem, kiedy zostanie załadowana strona, na której wykonują się zapytania do bazy danych.

Jak działa cache'owanie?

Cache'owanie zapytań w CodeIgniterze, działa dynamicznie, kiedy Twoje strony są odwiedzane. Za pierwszym razem, kiedy uruchomione jest cache'owanie, obiekt wyniku zapytania zostanie zserializowany i zapisany w pliku tekstowym na Twoim serwerze. Następnym razem, kiedy strona zostanie załadowana, zamiast wykonywania zapytania, zostanie użyty plik cachu. Użycie bazy danych może zostać efektywnie ograniczone do zera dla wszystkich stron, które zostały zcache'owane.

Tylko zapytania odczytu (SELECT) mogą być cache'owane, ponieważ tylko one zwracają dane. Zapytania zapisu (INSERT, UPDATE, itd.), nie mogą być cache'owane, ponieważ nie zwracają danych.

Pliki cache NIE wygasają. Każde zapytanie, które zostanie zcache'owane, pozostanie w tym stanie, dopóki nie usuniemy cachu. System cache'owania pozwala na usuwanie pliku cache powiązanego z konkretną stroną - możesz również usunąć wszystkie pliki cachu. Zazwyczaj będziesz chciał korzystać z funkcji sprzątającej opisanej poniżej, która usuwa pliki cachu, gdy mają miejsce pewne zdarzenia, np. dodanie nowych informacji do bazy danych.

Czy cache'owanie wpłynie pozytywnie na wydajność Twojej strony?

Uzyskanie wzrostu wydajności w wyniku cache'owania, zależy od wielu czynników. Jeśli masz wysoce zoptymalizowaną bazę danych pod bardzo małym obciążeniem, prawdopodobnie nie odczyjesz wzrostu wydajności. Jeśli Twoja baza danych jest pod dużym obciążeniem, prawdopodobnie zauważysz lepszą responsywność, zakładając że Twój system plików nie jest nadmiernie obciążony. Pamiętaj, że cache'owanie zmienia sposób w jaki informacje są pobierane - zamieniając operacje bazodanowe na operacje na plikach.

Dla przykładu, w niektórych klastrach serwerów, cache'owanie może być szkodliwe, ze względu na intensywność operacji na plikach. Na pojedynczym serwerze ze współdzielonym środowiskiem, cache'owanie prawdopodobnie będzie korzystne. Niestety nie ma prostej odpowiedzi na pytanie, czy powinieneś używać cache'owania bazy danych. Tak naprawdę, zależy to od Twojej sytuacji.

W jaki sposób pliki cache są przechowywane?

CodeIgniter umieszcza wynik dla KAŻDEGO zapytania w osobnym pliku. Zestawy cache'owanych plików są dodatkowo podzielone na subfoldery, których nazwy korespondują z nazwami funkcji kontrolerów. Aby być precyzyjnym: subfoldery mają takie same nazwy jak dwa pierwsze segmenty adresu URI (nazwa kontrolera i funkcji).

Dla przykładu, powiedzmy że masz kontroler o nazwie blog, z funkcją comments, która zawiera trzy zapytania. System cache'owania stworzy folder o nazwie blog+comments, do którego zapisze trzy pliki cache.

Jeśli używasz dynamicznych zapytań, które się zmieniają w zalezności od informacji zawartych w adresie URI (np. kiedy używasz paginacji), każda instancja zapytania będzie produkować swój własny plik cache. Dlatego możliwe jest posiadanie o wiele większej ilości plików cache, niż wskazywałaby na to liczba zapytań.

Zarządzanie plikami cache

Z racji tego, że pliki cache nie wygasają, będziesz musiał zbudować pewne procedury detekcji dla aplikacji. Dla przykładu, powiedzmy że masz blog który pozwala użytkownikom na zostawienie komentarza. Jeśli nowy komentarz zostanie dodany, będziesz chciał usunąć pliki cache powiązane z funkcją kontrolera, która odpowiada za pokazywanie komentarzy. W czyszczeniu tych danych pomogą Ci dwie funkcje, których opis znajdziesz poniżej.

Nie wszystkie funkcje bazy danych współpracują z cache'owaniem

Na koniec musimy zaznaczyć, że obiekt wyniku, który jest cache'owany jest uproszczoną wersją pełnego obiektu wyniku. Z tego powodu niektóre funkcje wyników zapytań nie są dostępne.

Poniższe funkcje NIE SĄ dostępne, podczas korzystania ze zcache'owanego obiektu wyników:

Również dwa zasoby bazy danych (result_id and conn_id), nie są dostępne przy stosowaniu cache'owania, ponieważ zasób wyniku odnosi się tylko do aktualnie przeprowadzanych operacji.


Opis funkcji

$this->db->cache_on()  /   $this->db->cache_off()

Ręcznie włącza/wyłącza cache'owanie. Może być przydatne jeśli chcesz uchronić konkretne zapytania przed cache'owaniem. Przykład:

// Włącz cache
$this->db->cache_on();
$query = $this->db->query("SELECT * FROM mytable");

// Wyłącz cache dla tego zapytania
$this->db->cache_off();
$query = $this->db->query("SELECT * FROM members WHERE member_id = '$current_user'");

// Włącz cache ponownie
$this->db->cache_on();
$query = $this->db->query("SELECT * FROM another_table");

$this->db->cache_delete()

Usuwa pliki cache powiązane z konkretną stroną. Jest przydatne jeśli potrzebujesz wyczyścić cache po aktualizacji w bazie danych.

System, zapisuje pliki cache do folderów, które odpowiadają adresowi URI strony, którą przeglądasz. Dla przykładu, jeśli przeglądasz stronę pod adresem example.com/index.php/blog/comments, system umieści wszystkie plki cache powiązane z tą stroną w folderze o nazwie blog+comments. Aby usunąć te konkretne pliki cache, będziesz musiał użyć funkcji:

$this->db->cache_delete('blog', 'comments');

Jeśli nie podasz żadnego parametru, zostanie użyty aktualny adres URI.

$this->db->cache_delete_all()

Usuwa wszystkie istniejące pliki cache. Przykład:

$this->db->cache_delete_all();