Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Cache + include/require
Forum PHP.pl > Forum > PHP
Solimo
Witam,

Czy istnieje prosty sposób na cachowanie tablic zawartch w pliku, który podłączam sobie do skrypty jako swojego rodzaju cfg? Np. Mamy dużą tablicę informacji, której nie trzymamy w bazie bo są to dane niezmienne więc includujemy sobie ją gdy potrzebujemy informacji. Chciałbym to potraktować jakimś cache bowiem ta tablica jest spora a jest wywoływana podczas każdego odwołania do www.

Pozdrawiam,
Robert
Fifi209
Jaki sens ma cache tablicy, która jest trzymana w pliku? Cache jest przechowywane zwykle w pliku.
Jeżeli chodzi o wzrost wydajności to musiałbyś trzymać chyba to cache w pamięci ram bo innego wyjścia nie widzę.
Solimo
Cytat
Jeżeli chodzi o wzrost wydajności to musiałbyś trzymać chyba to cache w pamięci ram bo innego wyjścia nie widzę.


Tak zrobię, ale tylko gdy nie będę miał innego wyjścia. Staram się jak najbardziej uniezależnić apliakcje od potrzeby dedyka. Tak na prawdę ta tablice to max 1000x50, więc może nie warto kombinować?
zelu
Jeżeli za każdym razem nie potrzebujesz całej tablicy, a tylko jej małą część może warto rozważyć przerzucenie jej na bazę.
nospor
Cytat
Tak na prawdę ta tablice to max 1000x50
Co Ty tam trzymasz??
Solimo
Np. Cechy samochodów, w bazie przetrzymuje już cechy samochodów spowodowane tym że user nim jeździł, ale dane ogólne, niezmienne dla danego id samochodu trzymam właśnie w tych tablicach. Dzięki temu aby przedtsawić dany model nie muszę wykonywać akcji na DB.

Wydaje mi się że 60% odwołań potrzebuje 5-10% tablicy a reszta często ponad 60%. Pytanie co wypadnie lepiej? DB czy tab[]? Zawsze można powiązać tabele trzymające dany model i jego niezmienne cechy oraz dane zmienne dla konkretnego usera. Czy tak będzie lepiej? Wzrośnie ilość danych wyciąganych z bazy, ilość w niej przechowywanych (no problem bo mamy index dla każdego auta), a zniknie tablica.
zelu
Trzymanie tego w bazie (w sensownym schemacie) ułatwi Ci zarządzanie tym wszystkim. Dodatkowo łatwiej będzie wyszukiwać określone modele. Moim zdaniem powinieneś to przenieść na bazę danych + ewentualnie wtedy cache'ować często pobierane dane

Pozdro
Solimo
MySQL ma chyba wbudowane mechanizmy, które sprawią, że jeżeli pow. się część zapytania odnosząca się do tej samej tabli, do tego samego wiersza, z zapytaniem o tą samą część pól wiersza to zapisze to w swoim cache.
  1. SELECT a.x, a.y, b.e, b.r FROM aaa a, bbb b WHERE b.owner = ? AND b.auto = a.id

Zakładając że owner jesy indeksem, id kluczem to nawet w przypadku 20 samochodów z 1mln samochodów na świecie powinno to zapytanie być wydajne, prawda?
erix
Cytat
MySQL ma chyba wbudowane mechanizmy, które sprawią, że jeżeli pow. się część zapytania odnosząca się do tej samej tabli, do tego samego wiersza, z zapytaniem o tą samą część pól wiersza to zapisze to w swoim cache.

A ten cache jest zwykle guzik warty.

Cytat
Chciałbym to potraktować jakimś cache bowiem ta tablica jest spora a jest wywoływana podczas każdego odwołania do www.

Doinstaluj jakiś akcelerator do PHP i będziesz miał problem z głowy. Najlepszym wyjściem i wymagającym najmniej roboty.
Crozin
1) Trzymanie bezpośrednio w pamięci (ewentualnie poprzez jakiegoś pośrednika w postaci bazy danych (dla MySQL: tabela typu MEMORY))
2) Jeżeli jest dostępny jakiś akcelerator PHP (np. APC) to jako zwykła tablica PHP
3) W postaci zserializowanej tablicy w pliku

W przypadku opcji #1 konieczne jest przechowywanie kopii tablicy - by po restarcie serwera można było wrzucić coś do pamięci.

Fifi209
Cytat(Crozin @ 6.08.2010, 22:04:24 ) *
3) W postaci zserializowanej tablicy w pliku

I odczytanie zawartości pliku, wywołanie unserialize ma być szybsze od require czy include ?
Solimo
Cytat
A ten cache jest zwykle guzik warty.

Gdy wykonywana część zapytania jest identyczna do wykonanego "niedawno" to zazwyczaj zauważam różnice typu 0,0006 a 0,006. Chyba że mówimy o różnych rzeczach.

Nie rozumiem jak serializacja ma przyspieszyć. Właśnie APC chyba rozwiąże moje problemy.
erix
Cytat
I odczytanie zawartości pliku, wywołanie unserialize ma być szybsze od require czy include ?

I owszem. Parsowanie zserializowanego stringa jest szybsze niż parsowanie gotowego kodu. Wyjątek: zainstalowany akcelerator.

Cytat
Gdy wykonywana część zapytania jest identyczna do wykonanego "niedawno" to zazwyczaj zauważam różnice typu 0,0006 a 0,006. Chyba że mówimy o różnych rzeczach.

No ok, ale zestawienie połączenia TCP z bazą zżera sporo zasobów. Po co - więc - w ogóle katować bazę?
Solimo
Wychodzi na to, że akcelerator ratuje moją idee wyrzucenia z bazy statycznych danych. Dziękuję za pomoc smile.gif !
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.