![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 10.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Mam takie pytanie
Oplaca sie cachowac zapytania z bazy danych jesli cachuje dany box. np. cachuje calego newsa(ilosc komentarzy, autora, kategorie, tagi etc.) Tak na chlopski rozum nie oplaca sie cachowac zapytan i tego boxu (wtedy najpierw bedziemy musiel cachowac zapytanie a potem dany box - co za tym idzie bezsensu robimy cachowanie bazy). Jesli moje myslenie jest dobre i w tym przypadku nie oplaca sie cachowac zapytania to mozna zrobic tak z wszystkim tj. komentarze (nie cachujemy zapytan tylko caly box z komentarzami tj. autor, + dodatkowae opcje(np ilosc znajomych etc)) Patrzac na to cachowanie bazy danych jest zbedne(biorac pod uwage ze np. mysql ma system wlasny cachujacy)... Jesli sie myle prosze o napisanie co jest bardziej oplacalne(mowimy o tym aby strona chodzila szybciej i mowimy tu o stronie gdzie dziennie jest grubo ponad 100 tys odslon ! ) |
|
|
![]()
Post
#2
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Tak na chlopski rozum nie oplaca sie cachowac zapytan i tego boxu (wtedy najpierw bedziemy musiel cachowac zapytanie a potem dany box - co za tym idzie bezsensu robimy cachowanie bazy). Jeden cache więcej = N*zapytanie mniej. N = liczba użytkowników otwierających stronę jednocześnie. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 10.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Ale zauwaz ze jak mamy zapisany caly news w cache - to odczytujemy jego a nie zapytania z bazy.
Chodzi o to ze cachujemy sam box z np. newsem a nie zapytania. |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
No to tym lepiej. ;]
Cytat biorac pod uwage ze np. mysql ma system wlasny cachujacy To powiedz, dlaczego każda porządna biblioteka ma system cache? (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 10.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Jesli mowisz o frameworkach to one sa zlym wyjsciem dla duzych stron.
Mowimy o przypadku gdy cachujemy calego boxa z newsami - czy wtedy cachowanie bazy cos daje? Albo inaczej co bardziej sie oplaca robic np pobierajac newsa: 1. cachowac zapytanie z bazy 2. cachowac calego newsa (z kategoriami,autorem etc) 3. cachowac zapytanie z bazy + cachowac calego newsa Ten post edytował vadergb 10.06.2009, 20:38:06 |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Mowimy o przypadku gdy cachujemy calego boxa z newsami - czy wtedy cachowanie bazy cos daje? Ja robię podobnie na blogu - mam sidebar z kilkoma zapytaniami. Ale nie zmienia się on za często, więc robię cache na godzinę ważności. Zwykłe ob_start" title="Zobacz w manualu PHP" target="_manual z zapisywaniem do pliku. I baza jest odpytywana tylko wtedy, jeśli nie ma cache. Cytat Jesli mowisz o frameworkach to one sa zlym wyjsciem dla duzych stron. Teoretycznie tak, praktycznie - zdziwiłbyś się, ile stron napędzają frameworki. Cytat 2. cachowac calego newsa (z kategoriami,autorem etc) Tak, jak napisałem wcześniej - samo zbuforowanie wyniku zapytania znacznie zmniejszy zużycie na zasoby. A maksymalne efekty osiągniesz zapisując cały wygenerowany blok. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 10.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Czyli jesli chce zrobic najbardziej wydajna strone to:
1. powineineme zrezygnowac z cache zapytan do bazy na rzecz cache boxow(w klasie ktora pobiera zapytanie nawet nie umieszczac opcji cachowania zapytan - czy moze do czegos sie to przyda?) Tak ostatnio zastanawialem czy oplaca sie korzystac z klasy PDO dla 100 wywolan zapytania SELECT id_base,time FROM time_base limit 1 zwykle 0.012507927299726 class PDO 0.013354476379311 classa extends PDO(czyli mozna tu dodac cachowanie, debugowanie i wszytko) 0.016115679599271 classa extends PDO - klasa ktora dziedziczy PDO - klasa PDO + dodatkowe funkcje jak widac zwykle zapytanie jest najszybsze. Najgorsza wydajnosc ma klasa ktora dzieczy pdo . Tak sie zastanawiam czy oplaca sie napisac swoja klase, korzystac ze zwyklego mysql_query, napisac swoja klase do klasy pdo, korzystac tylko z pdo... Dodam ze chodzi mi glownie o wydajnosc jako ze strona ktora mam( i chce przerobic ) ma ponad 100 tys odslon dziennie - a planuje rozbudowe i ta ilosc moze sie zwiekszyc kilkakrotnie. pozdrawiam Ten post edytował vadergb 10.06.2009, 21:07:43 |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
zwykle 0.012507927299726 class PDO 0.013354476379311 classa extends PDO(czyli mozna tu dodac cachowanie, debugowanie i wszytko) 0.016115679599271 No właśnie. Warto korzystać ze zwykłych funkcji? Moim zdaniem nie. Różnice są na tyle niewielkie, że zdecydowanie lepiej wybrać PDO (lub jego rozszerzenie wedle potrzeb). |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 10.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Niby sa niewielki roznice ale gdy jest 1000 osob online to troche to daje.
JEszcze mam jedno pytanie. Z tego co wiadomo nie powinno sie robic zapytan w petli... wszystko fajnie jak jest news i mamy pobrac autora w jednym zapytaniu to pobierzemy. Ba nawet gdy mamy ilosc komentarzy to tez to pobierzemy. A gdy nam sie trafi ze musimy pobrac kategorie ktore sa zapisane w innej tablicy i zeby odczytac je wszystkie trzeba wykonac while czyli
Tak wykonamy robiac petle w petli a gdy chcemy tego uniknac? To jak to mozna optymalnie pobrac? Z tego co sie orientuje przy duzych projektach(duzo uzytkownikow): - nie powinno sie korzystac z frameworkow(po co komu xxx klas ktore pozeraja cenny czas) - teoretycznie kod strukturalny jest szybszy od class Ja robiac duzy projekt myslalem o zastosowaniu: -modelu MVC i najprostszych do tego klas(wszystko proste zeby duzego obciazenia nie bylo). -cachowanie boxow -klase na sesje, klase na autoryzacje(dostep do danych podstron). -PDO + klasa dziedziczaca do niej. Zastanawialem sie takze ostatnio nad zastosowaniem do PDO klasy Open Power Driver(http://www.eioba.pl/a70003/biblioteka_pdo_bazy_danych_podstawy_php - tu na dole jest opisana). JEdnak po testach przy pobieraniu zapytania nie cachujac za pomoc klasy OPD i PDO wynik byl o wiele bardziej zadawalajacy na korzysc PDO. |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli chcesz mieć szybko pisz własne biblioteki w C/C++ (nie pamiętam jaki to język był), będzie o wiele szybciej niż kod strukturalny w php.
|
|
|
![]()
Post
#11
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Różnice są na tyle niewielkie, że zdecydowanie lepiej wybrać PDO (lub jego rozszerzenie wedle potrzeb). Na pewno? Ja nie jestem tego taki pewien: http://dealnews.com/developers/php-mysql.html Cytat A gdy nam sie trafi ze musimy pobrac kategorie ktore sa zapisane w innej tablicy i zeby odczytac je wszystkie trzeba wykonac while Cytat Tak wykonamy robiac petle w petli a gdy chcemy tego uniknac? To jak to mozna optymalnie pobrac? Przecież jak masz napisaną relację jeden - do-wielu (news - news2cat - cat) wszystko leci jednym zapytaniem i po prostu wyciągasz. Cytat - teoretycznie kod strukturalny jest szybszy od class Ale dużo ciężej coś poprawić/zarządzać. Jak zmienisz np. front-end do bazy, to wymieniasz tylko klasę, a nie łapiesz dziesiątki funkcji. O problemach z widocznością/zasięgiem/porządkiem wśród zmiennych nie wspomnę. Cytat - nie powinno sie korzystac z frameworkow(po co komu xxx klas ktore pozeraja cenny czas) Zależy. Przy większych projektach tworzy się dedykowane rozwiązania. Cytat -cachowanie boxow A gdyby tak całych stron? Powiedzmy - na tylko minutę, przy wielu użytkownikach połączonych jednocześnie zmniejszy diametralnie obciążenie (pomijam części wymagające logowania, etc). Zobacz, jak działa np. WP-Supercache. Cytat -klase na sesje, klase na autoryzacje(dostep do danych podstron). Nie lepiej ACL zintegrowany z sesją? Cytat -PDO + klasa dziedziczaca do niej. Patrz, link wyżej. PS. O shm/akceleratorach przypominać chyba nie muszę? |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 10.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Cytat Różnice są na tyle niewielkie, że zdecydowanie lepiej wybrać PDO (lub jego rozszerzenie wedle potrzeb). Na pewno? Ja nie jestem tego taki pewien: http://dealnews.com/developers/php-mysql.html Czyli powinienem sobie odpuscic PDO? i napisac wlasna klase? Czy skorzystac z mysqli + dopisac ew. klase dziedziczna Cytat A gdyby tak całych stron? Powiedzmy - na tylko minutę, przy wielu użytkownikach połączonych jednocześnie zmniejszy diametralnie obciążenie (pomijam części wymagające logowania, etc). Zobacz, jak działa np. WP-Supercache. Hmm przypuscmy podczas wyswietlania newsa (przypuscmy) mamy 3 boxy [news] => zadko sie zmienia - cachujemy jako box [komentarze] => Zmieniaja sie czesciej niz news - cachujemy jako box [podobne newsy] => Zmieniaja sie (gdy pojawia sie jakis news z podanej kategorii) - cachujemy boxem Gdybysmy cachowali cala strone to po zabawie z ktoryms komentem, newsem etc musimy cachowac od nowa. Chcialbym takze zaznaczyc ze te boxy bylyby cachowane do czasu edycji ktoregos elementu(nie ze wzgledu na czas). Cytat Nie lepiej ACL zintegrowany z sesją? O to mi chodzilo. Ten post edytował vadergb 10.06.2009, 21:59:44 |
|
|
![]()
Post
#13
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Czyli powinienem sobie odpuscic PDO? i napisac wlasna klase? Czy skorzystac z mysqli + dopisac ew. klase dziedziczna Właśnie. Osobiście, z PDO korzystam wtedy, gdy muszę (SQLite3) albo przy dosłownie malutkim projekcie, w którym trzeba coś szybko naskrobać. Coś większego - własny wrapper. Cytat Gdybysmy cachowali cala strone to po zabawie z ktoryms komentem, newsem etc musimy cachowac od nowa. Chcialbym takze zaznaczyc ze te boxy bylyby cachowane do czasu edycji ktoregos elementu(nie ze wzgledu na czas). I ok, rozsądnie. :] Ale wiesz - przy większym obciążeniu stosuje się wtedy demony, które są zoptymalizowane do wywołań statycznych (np. YAWS w Erlangu, Nginx; YAWS jest potężny (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) ). Wtedy cache całości ma sens. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 10.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
co do
Cytat PS. O shm/akceleratorach przypominać chyba nie muszę? To sa sprawy zalezne od serwera. Mi chodzi o to co zrobic od strony skryptu(programisty) aby wszystko smigalo dobrze |
|
|
![]()
Post
#15
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Jeśli chodzi o shm, to i od programisty zależy... (konkretniej od sterownika cache'ującego)
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 10.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Cytat Tak wykonamy robiac petle w petli a gdy chcemy tego uniknac? To jak to mozna optymalnie pobrac? Przecież jak masz napisaną relację jeden - do-wielu (news - news2cat - cat) wszystko leci jednym zapytaniem i po prostu wyciągasz. Tu mamy relacje wielu do wielu chyba 1 tabela newsy: [id_news,tytul] 2 tabela kategorie [id_cat,nazwa] 3 tabela news_cat [id_news,id_cat] mamy 2 newsy 1 => [1,pierwszy news] 2 => [2, drugi news] mamy 2 kategorie 1=> [1, pierwza kategoraia] 2=> [2, druga kategoria] rekordy w news_cat: 1=> [1,1](1 news do 1 kategorii) 2=> [1,2](1 news do 2 kategorii) 3=> [2,1](2 news do 1 kategorii) czyli musimy zrobic
Kod napisany na szybko nie wiem czy dziala chodzilo o to zeby pokazac o co mi chodzi. takie cos wyswietli nam 1 box: To jest tytul: pierwszy news To sa kategorie: Pierwsza kategoria, druga kategoria, 2 box: To jest tytul: drugi news To sa kategorie: Pierwsza kategoria Jak wyswietlic cos takiego bez uzycia petli w petli jak pokazalem to u gory ? |
|
|
![]()
Post
#17
|
|
Grupa: Moderatorzy Postów: 6 072 Pomógł: 861 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza ![]() |
Jak wyswietlic cos takiego bez uzycia petli w petli jak pokazalem to u gory ? Ja tego typu sprawy rozwiązuję 2 zapytaniami: Pierwsze:
Drugie:
Potem tylko odpowiednie obrobienie tego w PHP (utworzenie odpowiedniej tablicy) i masz wszystko co trzeba. Jeżeli Twoja wersja MySQL nie obsługuje LIMITu w podzapytaniu lub chciałbyś się po prostu pozbyć podzapytania to możesz w PHP pobrać wszystkie wyciągnięte id z zapytania pierwszego, przypisać je do tablicy no i potem w PHP:
Ten post edytował phpion 11.06.2009, 12:37:16 |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 52 Pomógł: 0 Dołączył: 10.06.2009 Ostrzeżenie: (0%) ![]() ![]() |
Zrobilem cos takiego:
vs
przy petli 100x pobran: 1 sposob 0.24362802505493 2 sposob 0.35362802505493 Baza liczy okolo 20-30 newsow(malo), kategori(games) - liczy okolo 20, a a news_cat liczy tez okolo 20 Wszystko fajnie... ale co jak chcemy pokazac inaczej te dane niz nazwa1, nazwa2, nazwa3 ? jesli np chcemy zrobic z tego <a href="link do newsow tylko danej kategori>nazwa1</a>,<a href="link do newsow tylko danej kategori>nazwa2</a>? Mamy pobrac w nastepne pole(albo to samo id)? i bawic sie tym? utworzyc z tego tablice a potem wyswietlic? (Wszystko to kosztuje czas)... Znalazlem jeszcze jeden sposob
Jesli chodzi o czas wykonania dla 100 pobran to jest on wiekszy od 1 sposob z postu wyzej i mniejszy od 2 sposob z postu wyzej. Tylko ze tych kategori nie ma duzo (okolo 20)... a co jak ich bedzie 200 ? Ten sposob wtedy sie mija z celem... Jaka jest najbardziej optymalna droga? Ten post edytował vadergb 11.06.2009, 21:16:01 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 27.09.2025 - 01:06 |