Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SF2][Redis][Doctrine] Cachowanie danych z BD
daniel1302
post 6.09.2016, 07:56:07
Post #1





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

Ostrzeżenie: (0%)
-----


Witam, mam u siebie w aplikacji taką politykę:
Mam standardowo encje do tabelek i do większości encji mam zrobione repozytoria. Jak wiadomo czasem trzeba zrobić coś bardziej optymalnie, napisać jakieś zapytanie łączące itp.

Teraz zakładam, że mam moduł statystyk czegoś tam. Taki moduł jest korzysta z repozytorium StatisticRepository, wyświetla on dane statystyczne w kilku miejscach na portalu.
Zakładamy, że nie mogę zrobić np serwisu bo dane są inaczej prezentowane a mało tego w niektórych miejscach trzeba je dodatkowo przeliczyć/zmodyfikować.

I teraz dwa pytania:
1) Jak robicie cachowanie danych u was? Mam dwa podejścia:
a ) W każdym kontrolerze cachuje już wyjściowe dane tzn jeśli jest w cache to tylko pobieram i wypluwam wyniki na ekran. Jest to szybsze do tego co chcę zrobić lecz mniej wygodne.
b ) Dla mnie wygodniejsze było by zacachowanie danych bezpośrednio pobranych z BD i potem w kontrolerze wywolywac np metode $statsRepository->getSomeDataWithCache(...);
I tutaj aby rozwiązanie było elastyczne powinienem mieć CacheInterface który pozwala mi na użycie dowolnego mechanizmu cachowania np pliku txt/xml/json..., czy tam mojego redisa czy innego dowolnego rozwiązania.
Ale jako, że korzystam tylko i wyłącznie z redisa lepiej to przekazywałbym jako 1-szy parametr obiekt PRedis.

Dane są potrzebne w wielu miejscach i wyciągnięcie danych zajmuje 0.5 sekundy a przeliczenie jest kilka set razy szybsze.

Czy takie rozwiązanie jak w podpunkcie b jest dobre? Czy można wyłuskać obiekt redisa?

2) Gdzie umieszczacie klasy modeli np mam model statystyk który wykonuje obliczenia statystyczne, dodatkowo mam model TreeMaxtix który wykonuje obliczenia i operacje na macierzach reprezentujących drzewa itp...
Czy jeśli umieszczę to w Entity/Model to jest to jakoś rażące? Mam kilka 5/6 modeli.

Ten post edytował daniel1302 6.09.2016, 07:56:37
Go to the top of the page
+Quote Post
kpt_lucek
post 6.09.2016, 08:42:45
Post #2





Grupa: Zarejestrowani
Postów: 428
Pomógł: 77
Dołączył: 10.07.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Odnośnie 2):
src/MojBundle/Entity
src/MojBundle/Model

Niejako Entity jest modelem, aczkolwiek używasz go pośrednio do komunikacji z bazą, w przypadku modelu, może być to zwykły DTO bez innego zastosowania jak reprezentacja danych w formie obiektowej.

Odnośnie 1)

Z tego co wiem to Doctrine ma mechanizm do cacheowania, tutaj możesz poczytać jak to jest zaimplementowane i używane przez Doctrine z użyciem Redisa.

Jak to robię u siebie? Wszystko zależy od projektu, typu danych, potrzeb biznesowych. Czasami interesuje Cię tylko i wyłącznie wynik, bo część logiczna jest wykonywana cyklicznie (np. CRON), w innym wypadku potrzebujesz cacheować obiekty, bo wyciągnięcie ich zajmuje (jak u Ciebie) dużo czasu.


--------------------


Cytat
There is a Bundle for that
Lukas Kahwe Smith - October 31th, 2014
Go to the top of the page
+Quote Post
lukaskolista
post 6.09.2016, 15:50:16
Post #3





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

Ostrzeżenie: (0%)
-----


1 b
użyj wzorca proxy i takie proxy ustaw jako dekorator usługi repozytorium

2) Rozważ taką opcję, aby za obliczenia były odpowiedzialne usługi. Nie powiem Ci co konkretnie masz zrobić, bo wszystko zależy od kontekstu słowa "obliczenia".

Ten post edytował lukaskolista 6.09.2016, 15:50:25
Go to the top of the page
+Quote Post
daniel1302
post 9.09.2016, 10:54:46
Post #4





Grupa: Zarejestrowani
Postów: 602
Pomógł: 30
Dołączył: 1.08.2007
Skąd: Nowy Sącz

Ostrzeżenie: (0%)
-----


Dziekuje jak będę miał chwilkę to poszukam jakichś rozwiązań zgodnie z waszymi sugestiami
Go to the top of the page
+Quote Post
pyro
post 14.09.2016, 14:29:42
Post #5





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


To zabawne to czytać, gdy właśnie stworzyłem bibliotekę do tego przeznaczoną:

http://forum.php.pl/index.php?showtopic=252008


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 03:34