Odpowiedzi:
Nie ma znaczenia dla buforowania, jeśli używasz widoków lub db_query (). Buforowanie działa zawsze tak samo, w jaki sposób dane są pobierane, gdy brakuje pamięci podręcznej, zależy wyłącznie od Ciebie.
Aby zobaczyć kilka przykładów, możesz spojrzeć na funkcje, które używają cache_get () , na przykład zmienna_initialize () .
Jeśli twoja funkcja jest wywoływana wiele razy, prawdopodobnie chcesz połączyć ją ze statyczną pamięcią podręczną, patrz na przykład archiver_get_info () . A jeśli odbudowywanie danych jest naprawdę powolne, możesz zapobiec temu wiele razy, używając struktury blokującej, jak robi to zmienna_initialize ().
Pamiętaj, że buforowanie pojedynczego zapytania ma sens tylko wtedy, gdy jest powolne, ponieważ cache_get () jest również zapytaniem db, chyba że użyjesz alternatywnego zaplecza pamięci podręcznej, takiego jak Memcache.
I wreszcie, widoki mają już wbudowane buforowanie i można je skonfigurować w widoku. To może być również opcja.
db_query(), a konieczność buforowania wartości od $results->fetchAll()i nie $resultsjest kluczem do jej uruchomienia .
Nie sądzę, że warstwa DB ma wbudowany mechanizm buforowania (choć mogę się mylić), ale możesz skorzystać z domyślnego interfejsu API pamięci podręcznej.
To tylko podstawowy przykład, który zbuforuje wyniki zapytania, aby uzyskać węzły określonego typu:
function MYMODULE_get_nodes_by_type($type) {
// Setup a cache ID
$cid = 'MYMODULE:node_types:' . $type;
// If a cached entry exists, return it
if ($cached = cache_get($cid)) {
return $cached->data;
}
// Otherwise load the data
$data = db_query('SELECT * FROM {node} WHERE type = :type', array(':type' => $type))->fetchAll();
// And cache it
cache_set($cid, $data, 'cache', strtotime('+6 days'));
}
Oprócz standardowego mechanizmu cache_set / cache_get , który zapewnia Drupal, jeśli używasz MySQL jako bazy danych, możesz włączyć pamięć podręczną zapytań , która może buforować wyniki widoków lub dowolne inne zapytania do bazy danych, w sposób przezroczysty. mysqltuner może pomóc w ustaleniu dobrych wartości rozmiaru pamięci podręcznej.
Zauważ, że jeśli dużo piszesz do bazy danych, buforowanie zapytań staje się mniej skuteczne ze względu na sposób działania strategii unieważniania pamięci podręcznej (zapis do tabeli unieważnia wszystkie wpisy WYBIERAJĄCE OD LUB DOŁĄCZ do tej tabeli).
Istnieje również mechanizm buforowania PostgreSQL , ale nie mam z nim bezpośredniego doświadczenia.
Niedawno odkryłem moduł Akcje pamięci podręcznej . Za pomocą tego modułu możesz ustawić buforowanie widoku na pamięć podręczną uruchamianą przez reguły i utworzyć regułę unieważniania pamięci podręcznej na określonych widokach i ekranach widoków.
Na przykład pamięć podręczną widoku zawierającego listę węzłów określonego typu treści można opróżnić, gdy zostanie utworzony nowy węzeł tego typu treści.