![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 8.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Potrzebuje waszego wsparcia w sformulowaniu zalozen projektu o nazwie " Forum internetowe zoptymalizowane pod duza ilosc wpisow". Po wstepnej wymianie maili ( z zalozeniami pracy ) z moim promotorem wyszlo ze albo moj sposob myslenia jest zly i czegos nie rozumiem , albo on nie wie co pisze ;-). Dlatego tez prosilbym was o pomoc w tej materii, bo grudzien juz za 3 miechy obrona a ja nie zaczalem jeszcze ;-). Ze wstepnej rozmowy wynika ze system ma dzialac w miare niezaleznie od bazy danych wiec mysle o uzyciu adodb. dalej chcialem zeby forum standardowo pobieralo posty z tygodnia takie rozwiazanie jest bodajrze w vbulletin. Mysle tez zeby starac sie ograniczyc z iloscia zapytan sql do 5 lub mniej na strone ( jesli sie da ). myslalem tez zeby wszystkie dane pobierac w ORDER BY DESC oraz zeby nie wykorzystywac zapytan pytu SELECT COUNT tylko pobierac dane z odpowiednich pol opisu danych forow ( np. ilosc tematow itp ). ale do tych postulatow odniosl sie cokolwiek dziwnie... bylbym wdzieczny za wszelkie sugestie, forum nie musi miec systemu templatow i bajerow. ma dzialac tylko sprawnie , stabilinie i szybko, przy duzym obciazeniu. Bede wdzieczny za wszelkie sugesitie. pozdrawiam -------------------- |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 657 Pomógł: 2 Dołączył: 15.08.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
"Ze wstepnej rozmowy wynika ze system ma dzialac w miare niezaleznie od bazy danych wiec mysle o uzyciu adodb"
Samo AdoDB ci tego nie zapewni. Musisz pamiętać że składnia SQL dla różnych baz jest odmienna. Dlatego pamiętaj by zgromadzić w jednym miejscu wszelkie zapytania. Wtedy tworzysz taki plik dla różnych wersji baz, a adodb służy tylko do uwpólnienia procesu łączenia się z bazą i wysyłania zapytań. -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 853 Pomógł: 25 Dołączył: 27.08.2003 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Cytat(Vengeance @ 2005-12-17 12:14:34) Samo AdoDB ci tego nie zapewni. zapewni jesli bedzies sie trzymal odpowiedniej skladni, a nie wrzucal do query zapytania jak lecą -------------------- "If debugging is the process of removing bugs, then programming must be the process of putting them in..."
sobstel.org |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Tylko, ze niektore rzeczy nie maja uniwersalnej skladni.
Wezmy np. przeszukiwanie typu Full-text Search. Jak chcesz to zapisac tak, zeby dzialalo na roznych RDBMS ? IPB stosuje w tym celu cos podobnego jak podal Vengeance. Maja swoja klase do budowania zapytan i wszystkie proste zapytania sa przez nia generowane odpowiednio pod zainstalowana baze. A zapytania, ktore moga wymagac rzeczy specyficznych dla danej bazy sa trzymane w osobnym pliku. -------------------- Brak czasu :/
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 259 Pomógł: 0 Dołączył: 17.05.2003 Skąd: Nysa Ostrzeżenie: (10%) ![]() ![]() |
ano pomysl z klasa do budowania zapytan nie jest taki zly. jesli to dobrze zrobic bedzie to ciekawe rozwiazanie.
a co do obciazenia bazy. jesli to ma lazic na kazdej bazie, to jest problem. bo taki mysql nie ma podzapytac co by ciut pomoglo. wiec musisz jechac na podstawowej skladni sqla i wywalac spora ilosc zapytan przy kazdym zadaniu. w miare mozliwosci musisz ograniczyc ilosc zapytan i tyle, nic wiecej sie nie da. inna rzecza jest ze jak to odpalisz na mysql to przy 300-400k wpisach na tabeli mysql umiera (z tego co kiedys testowalem czasy odpowiedzi beda w granicach 3min), posgresql jeszcze spokojnie pociagnie, a oracle pewnie tym bardziej chociaz tego ostatniego obstawiam w ciemno. no a zeby zmniejszyc ilosc zapytan trzeba zrobic czyste forum bez bajerow. powywalac avatary, emoty i inne cuda jak ilosc ludzi na danym forum itd. ja bym do sprawy podzszedl od innej strony. od baz danych. bo to jest slaby pkt tego problemu. nawet majac mysqla 3.x - mozna walnac ze 2-N serwerow z replikacjami bazy, a skrypty forum rownomiernie obciazaja baze. najprostrzy sposob? masz w pliku namiary na all bazy i zwyczajnie losuj - tutaj juz prawodpodobienstwo. tyle ze nie mam zielonego pojecia jakby to wygladalo. zgaduje ze to jednak nie za dobry pomysl, bo na forum przy duzym obciazeniu co chwila cos sie zmienia i praktycznie co chcila trzeba by slac z master bazy do slavow zmiany. moze i by tu fungowalo, a moze nie. nie mam pojecia jak w przypadku forum by to wyglodalo. trzeba by testy przeprowadzic ![]() -------------------- ![]() "Nie wiedziałem tylko, że Bóg też był na grzybach, gdy majstrował przy wszechświecie" (Janusz Wisniewski) dev: gazeta.ie |
|
|
![]() ![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 569 Pomógł: 0 Dołączył: 17.08.2003 Skąd: Dąbrowa Górnicza Ostrzeżenie: (0%) ![]() ![]() |
Cytat(halfik @ 2005-12-17 17:13:40) ... inna rzecza jest ze jak to odpalisz na mysql to przy 300-400k wpisach na tabeli mysql umiera (z tego co kiedys testowalem czasy odpowiedzi beda w granicach 3min), posgresql jeszcze spokojnie pociagnie, a oracle pewnie tym bardziej chociaz tego ostatniego obstawiam w ciemno. ... z ta przesada ze mysql umiera przy 3 milionach rekordow to bym nie byl taki pewien. Rozumiem ze tablica nie bedzie wygladac jak pas startowy szeroka, w pojedynczym rekodzie bedziesz mial okolo 30 kolumn. Dobra konstrukcja potrafi naprawde wiele, ja aktualnie w mysqlu mam ponad 8 milionow rekordow z czego jedna tablica ma ich wlasnie okolo 3 milionow i nie moge powiedziec zeby stronka nam chodzila kiepsko, a wejsc mamy srednio okolo 80tys unikalnych. To tak tylko wzgledem mysql'a ![]() -------------------- Warsztat: Linux: PHP, MySQL, Apache, NetBeans, C++, Qt-Creator
Użytkownik, słowo którego specjaliści IT używają, gdy chcą powiedzieć idiota Zarządzaj swoim budżetem domowym |
|
|
![]()
Post
#7
|
|
![]() Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Tak rozmawiacie o bazach danych, ale nikt nie wspomniał o tym, że adodb jest wolne... Chcesz niezależność od bazy i szybkość, to zastanów się nad PDO, które jako rozszerzenie pecl zainstalujesz pod php5, a w php5.1 jest włączone do dystrybucji... Jako szablonów spokojnie możesz użyć samego php - jeżeli forum nie będzie skomplikowane to się sprawdzi...
Pamiętaj o wszelkiego rodzaju cache. Na bazach się specjalnie nie znam, więc nie będę się włączał do dyskusji. -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 562 Pomógł: 15 Dołączył: 8.08.2003 Skąd: Denmark/Odense Ostrzeżenie: (0%) ![]() ![]() |
Może się też opłacić ewntualne cache'owanie wyników bardziej skomplikowanych zapytań z bazy do plików. Jeśli ustawisz czas życia takiego pliku na powiedzmy minute lub dwie, to forum wciąż będzie funkcjonalne, a będzie mniej zapytań.
-------------------- Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 8.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(bregovic @ 2005-12-17 18:21:00) Może się też opłacić ewntualne cache'owanie wyników bardziej skomplikowanych zapytań z bazy do plików. Jeśli ustawisz czas życia takiego pliku na powiedzmy minute lub dwie, to forum wciąż będzie funkcjonalne, a będzie mniej zapytań. ja wiem.... co by mialo byc cacheowane ? dla mnie jedyna rzecza jaka moze byc cacheowana to takie malo wazne rzeczy jak urodziny uzytkownikow, ich liczba i statystyki, danych tematow i postow bym sie bal ruszac bo to po prostu nie sprawdzi sie przy duzej ogladalnosci tak mi sie zdaje. co do zapytan dzialajacych na roznych bazach danych to mysle zeby zrobic cos takiego jak w stylu phpbb jest ze masz skladnie case: i tam sobie wybiera zapytanie wzorujac sie na tym co jest zdefiniowane w configu - jesli cos nie chce dzialac od razu... w zasadzie podejrzewam ze rozwiazanie jest podobne do tego zastosowanego w IPB tylko inaczej zaimplementowane. Najwiekszym problemem dla mnie bedzie dzialanie bazy danych przy duzej ilosci rekordow i nie wiem jak to rozwiazac, mysle ze niezlym rozwiazaniem przy bazie powyzej 500 mb ( zalozmy ) bylo by tworzenie pojednynczej tabeli dla kazdego z forow.. co o tym myslicie ? przy wiekszej ilosci oddzielnych plkow z danymi taki dysk twardy traci mniej czasu na wyszukiwanie odpowiednich danych, niz wyszukanie fragmentu jednego pliku. Ten post edytował ergo 17.12.2005, 20:54:43 -------------------- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli sądzisz, że cache nic nie da to jesteś w błędzie... Akurat przy dużych stronach cache jest zbawieniem. Tak jak mówi bregovic, zamiast ciągle wysyłać zapytania do bazy można zapisywać na dysku najczęściej pobierane dane w przystępniejszej postaci.
Rozwiązanie z wieloma tabelami nie wygląda za dobrze. Cache jest lepszym pomysłem - w taki sposób znacząco odciążasz bazę danych. -------------------- |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 8.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
odciaza owszem, ale nie w momencie kiedy dane maja sie dynamicznie zmieniac co chwile chyba, to jest dobre jak masz np. strone glowna z newsami i ci ktos dodaje newsa co godzine... przynajmniej tak mi sie wydawalo ze wtedy jest sens cacheowania.
Pozatym co sie stanie jesli jedna osoba odpowie w temacie a nastepna wejdzie sekunde pozniej i tez odpowie ? ta druga osoba nie zobaczy tego jednego posta i wtedy dany temat traci spojnosc.... jest zbyt duze prawdopodobnienstwo ze cos pojdzie nie tak przy takim podejsciu - pozatym jak rozwiazac problem uprawnien w takim przypadku ? to wszystko zmienia sie przeciez co chwile , sa rozne grupy , kazda ma inne uprawnienia do tematow i for, to wszystko trzeba brac pod uwage, pozatym nie wiem jak to by sie mialo do zajmowania miejsca na dysku przy duzej bazie i duzej ilosci osob na raz... wtedy nie jestem wcale pewien czy obciazenie nie bylo by mniejsze. -------------------- |
|
|
![]()
Post
#12
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Cytat jak to by sie mialo do zajmowania miejsca na dysku przy duzej bazi Zawsze istnieje zaleznosc ilosc zajmowanej pamieci * szybkosc = const Cytat Pozatym co sie stanie jesli jedna osoba odpowie w temacie a nastepna wejdzie sekunde pozniej i tez odpowie ? Po dodaniu odpowiedzi usuwasz cache z tematem. Przy otworzeniu strony z tym tematem tworzysz cache i wyswietlasz strone. Przeciez samych obejrzen stron jest z 10 razy wiecej nioz odpowiedzi. np. Przyczepiony: Najlepszy według was edytor do php! | 457 | 27 129 - ok 59 razy wiecej Forum internetowe heavy-duty | 10 | 153 - ok. 15 razy wiecej wiec jest to oplacalne. -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#13
|
|
![]() Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
W momencie modyfikacji danych czyścisz fragment cache, który został zmodyfikowany i tworzysz (albo nie) je od nowa z bazy. To czy będzie się opłacało zastosować cache trzeba sprawdzić, ale skoro na forum pojawia się dużo nowych wpisów, to operacji odczytu będzie dużo więcej...
Uprawnienia nie sa problemem, bo nie musisz zachowywać całego wyjścia. Jeżeli chcesz nadawać uprawnienia do wszystkich tematów osobno (co jest według mnie bez sensu) to musisz zapisać je w cache. Dużo miejsca chyba nie poświęcisz na to... Co z miejscem na dysku? Nad tym trzeba chwilę pomyśleć, ale można spokojnie ograniczyć zużycie wywalając najrzadziej czytane wpisy z cache a przechowując najważniejsze. Limity można ustawić na sztywno. -------------------- |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 8.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(Ludvik @ 2005-12-17 20:12:18) W momencie modyfikacji danych czyścisz fragment cache, który został zmodyfikowany i tworzysz (albo nie) je od nowa z bazy. To czy będzie się opłacało zastosować cache trzeba sprawdzić, ale skoro na forum pojawia się dużo nowych wpisów, to operacji odczytu będzie dużo więcej... Uprawnienia nie sa problemem, bo nie musisz zachowywać całego wyjścia. Jeżeli chcesz nadawać uprawnienia do wszystkich tematów osobno (co jest według mnie bez sensu) to musisz zapisać je w cache. Dużo miejsca chyba nie poświęcisz na to... Co z miejscem na dysku? Nad tym trzeba chwilę pomyśleć, ale można spokojnie ograniczyć zużycie wywalając najrzadziej czytane wpisy z cache a przechowując najważniejsze. Limity można ustawić na sztywno. uprawnienia byly by dawane do grup a grupy przypisywane do gorum , taki uklad jest chyba najpopularniejszy czyli sie sprawdza. co do miejsca na dysku to mysle ze moglbym zrobic skrypt wywolywany co np . 30 min ktory by kasowal wszystkie pliki cache - wtedy dysku nie zaleje fala cacheowanych plikow... no ale ok : mozemy zalozyc ze jest jeden punkt w zalozeniach projektu: Cacheowanie danych to teraz jeszcze pytanie co zrobic w sytacji kiedy 1 uzytkownik wchodzi na strone glowna i ma np uprawnienia tak ustawione ze widzi 10 for ,a drugi widzi tylko 5, trzeba by oddzielny cache dla kazdego id usera robic ( mzoe plote glupoty ale nie robilem nigdy cacheowania sql wiec sie nie orientuje za dobrze - czytalem tylko ze nie sprawdza sie to w stronach gdzie czesto dynamicznie sie zmieniaja dane ), nie wiem czy w takiej sytacji cacheowanie nie bierze w leb przynajmniej w widokach spisu forow ? -------------------- |
|
|
![]()
Post
#15
|
|
![]() Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czy cache przy wyświetlaniu listy for się przyda, chociaż to zawsze kilka zapytań mniej. Możesz utworzyć obiekt-kontener wszystkich for i trzymać dla każdego forum listę wymaganych ról od razu w cache. Uprawnienia użytkownika trzymasz w sesji.
Oczywiście nie możesz trzymać w cache danych osobistych użytkownika, bo wtedy każdy miałby swoje cache, a nie o to chodzi. Częściej potrzebne dane konkretnego użytkownika trzymasz w sesji. -------------------- |
|
|
![]()
Post
#16
|
|
![]() Grupa: Zarejestrowani Postów: 562 Pomógł: 15 Dołączył: 8.08.2003 Skąd: Denmark/Odense Ostrzeżenie: (0%) ![]() ![]() |
Masz dwie możliwości. Albo zapisujesz całe wyniki z bazy w tablicy - a działania logiczne robisz już w php. Albo robisz różne cache dla różnych grup. Osobbiście wolałbym opcję pierwszą...
-------------------- Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica |
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 8.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
no dobrze jeszcze bym chcial by ktos sie do tego cacheowania ustosunkowal z uzytkownikow, ale jeden punkt mamy , macie jeszcze jakies pomysly na optymalizacje tego wszystkiego ? (ja myslalem o takich sprawach jak InnoDB z mysql ale to bylo przed tym jak sie okazalo ze system ma pracowac na roznych typach baz :/ ) bo na prace inzynierska to chyba troche malo
![]() ![]() -------------------- |
|
|
![]()
Post
#18
|
|
![]() Grupa: Przyjaciele php.pl Postów: 698 Pomógł: 3 Dołączył: 28.03.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli masz zająć się również optymalizacją oprogramowania serwera, to na pewno musisz przemyśleć wewnętrzne cache php. Cache kodu pośredniego przy dużej liczbie wywołań skryptu jest jedną z najlepszych optymalizacji. Unikasz parsowania kodu za każdym razem, zamiast tego trzymasz już kod maszyny zenda w pamięci. Poszukaj czegoś googlarką "php cache".
Tak czy innaczej najważniejszy będzie dobry projekt. Optymalizacje zawsze można przeprowadzić, ale złego projektu nie poprawisz. Więc najpierw pożądnie pomyśl nad strukturą bazy, budową samego skryptu, a potem weź się za przyspieszanie. -------------------- |
|
|
![]()
Post
#19
|
|
Grupa: Zarejestrowani Postów: 79 Pomógł: 0 Dołączył: 8.03.2005 Ostrzeżenie: (0%) ![]() ![]() |
nie od strony serwera , nic nie mam robic, sam program... tylko zastanawia mnie jedna rzecz, ze np. ani IPB, ani Vbulletin ani phpBB nie uzywa rozbudowanego cacheowania sql ( o ile w ogole uzywa - w moim forum phpBB raptem 1 zapytanie jest chachowane wynik sql )
mysle ze gdyby to sie sprawdzalo w aplikacj tego typu to by dawno to bylo zaimplementowane, ale moze sie myle... Ten post edytował ergo 17.12.2005, 22:15:47 -------------------- |
|
|
![]()
Post
#20
|
|
![]() Grupa: Zarejestrowani Postów: 562 Pomógł: 15 Dołączył: 8.08.2003 Skąd: Denmark/Odense Ostrzeżenie: (0%) ![]() ![]() |
Bo generalnie cacheowanie sql nie jest potrzebne - sam zażuciłeś że ma być heavy-duty. Ztymże jak ma być na prawdę heavy-duty, to IMO trzeba optymalizować serwer i pisać pod konkretną bazę danych, wykorzystywać max możliwości. Połączenie kompatybilności i heavy-duty to bardzo trudna sprawa.
-------------------- Prank - for the fun. Mac - for the simplicity. Deviantart - for the kick.
Life is ours, We live it our way -- Metallica |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.06.2025 - 12:03 |