![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 289 Pomógł: 1 Dołączył: 2.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Prosiłbym o sprawdzenie poprawności w napisaniu klasy do "keszowania" zapytań mysql (czy chociaż dobrze zacząłem ją pisać), gdyż nie mam wiedzy na temat zaawansowanego programowania w php (którego trochę mogłem już zapomnieć) i zawsze używałem gotowych klas mysql. Klasa nie jest jeszcze dopracowana.
Powód edycji: [erix]: przeniosłem
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
-------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 125 Pomógł: 7 Dołączył: 27.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
no troche do poprawienia jest:
1) nie tworz polaczenia w klasie tylko przekazuj polaczenei do klasy 2) tranzakcje i locki 3) nie uzywaj plikow do cachowania bo ci sie to wysypie, w php nie ma mutexow na pliki wiec istnieje prawdopodobienstwo ze kilka procesow php zacznie pisac w tym samym czasie do jednego pliku i uszkodzi cache 4) uzyj persistent storage, np: apc ![]() -------------------- |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 289 Pomógł: 1 Dołączył: 2.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
@erix
"małpy" usunę, sam nie wiem po co je dałem na czas testowania i pisania klasy. Wolę pozostać przy samym MySQL (przyzwyczajenie). @cepa W wielu klasach mysql, które przeglądałem to mniej więcej tak jak u mnie tworzono połączenia wewnątrz klasy. Stosowanie plików cache jest złym rozwiązaniem? Możliwe, że plik cache może się uszkodzić, ale pewnie da się to jakoś zabezpieczyć, żeby nie dochodziło do nadpisywania pliku w tym samym czasie (zresztą żeby tak się stało, to chyba musiałbym mieć serwis, na którym przesiaduje z kilka tys osób online). Wiele serwisów używa cache mysql na plikach. Nie potrzebna jest mi mega zaawansowana klasa, wystarczy mi tylko, żeby była szybka, prosta, stabilna i używała cache ![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 125 Pomógł: 7 Dołączył: 27.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
W wielu klasach mysql, które przeglądałem to mniej więcej tak jak u mnie tworzono połączenia wewnątrz klasy. to ze w wielu to widziales to nie znaczy ze bylo to dobre, powiedzonko o muchach i gownie jest chyba najbardziej adekwatne ![]() Stosowanie plików cache jest złym rozwiązaniem? Możliwe, że plik cache może się uszkodzić, ale pewnie da się to jakoś zabezpieczyć, żeby nie dochodziło do nadpisywania pliku w tym samym czasie (zresztą żeby tak się stało, to chyba musiałbym mieć serwis, na którym przesiaduje z kilka tys osób online). Wiele serwisów używa cache mysql na plikach. Nie potrzebna jest mi mega zaawansowana klasa, wystarczy mi tylko, żeby była szybka, prosta, stabilna i używała cache ![]() cache na plikach nie jest zlym rozwiazaniem jak twoja aplikacja radzi sobie z konkurencyjnoscia, przykladowo taka baza danych tez operuje na plikach ale zapis do plikow jest zabezpieczony aby nie bylo sytuacji ze nagle dane z dwoch polaczen zaczna sie nawzajem nadpisywac. php jest wolne i nawet przy niewielkim ruchu bedziesz mial przeklamania, sproboj uzyc swojego cache jako np: licznik odwiedzin. poprostu takie rozwiazanie w php nie jest stabilne, apc czy memcache sa o niebo lepsze i szybsze ![]() -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 289 Pomógł: 1 Dołączył: 2.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Czyli w takim razie postaram się zmodyfikować klasę tak, aby połączenie było przekazywane do niej, tylko czy wtedy jest sens użycia mysql_close() w __destruct?
Zna ktoś może jakieś proste sposoby na zabezpieczenie nadpisywania plików w klasie w przypadku kilku połączeń? |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 125 Pomógł: 7 Dołączył: 27.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Czyli w takim razie postaram się zmodyfikować klasę tak, aby połączenie było przekazywane do niej, tylko czy wtedy jest sens użycia mysql_close() w __destruct? nie ma sensu, jak ktos wyzej zauwazyl uzycie PDO byloby wygodniejsze, w destruktorze zwolnilbym referencje do obiektu bo to jest skurwoza podczas testowania pozniej, czyli poprostu $this->_connection = null Zna ktoś może jakieś proste sposoby na zabezpieczenie nadpisywania plików w klasie w przypadku kilku połączeń? nie ma, najprostsze to wlasnie apc, memcache itp itd, poszperaj na necie troche o thread race ![]() -------------------- |
|
|
![]()
Post
#8
|
|
![]() Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Cytat Wolę pozostać przy samym MySQL (przyzwyczajenie). Radzę poczytać o tym, czy jest sens stosować to przyzwyczajenie... -------------------- ![]() ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW! |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
1) nie tworz polaczenia w klasie tylko przekazuj polaczenei do klasy Dlaczego? 2) tranzakcje i locki Transakcje jak już -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 125 Pomógł: 7 Dołączył: 27.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dlaczego? 1) mozna wtedy uzywac obiektu w sytuacji jak potrzebne jest wiecej niz jedna baza, chociazby skrypty migracji itp 2) testowanie, jezeli masz interfejs obiektu poalczenia to mozna zrobic mocka, lub podawac mu inne zrodla danych a kod nadal dziala jak nalezy -------------------- |
|
|
![]()
Post
#11
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Nikt nie powiedział, że klasa połączenia to Singleton?
![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Nikt nie powiedział, że klasa połączenia to Singleton? ![]() Nie, bo nie jest. Jeśli nie jest to można się bawić z nieograniczona liczbą obiektów i tym samym baz. I dobrze, bo nie chciałbym być zmuszony do korzystania z tylko jednego połączenia czy bazy. -------------------- Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 289 Pomógł: 1 Dołączył: 2.11.2007 Ostrzeżenie: (0%) ![]() ![]() |
Zastanawiam się nad wdrożeniem APC, jednak prawie nic nie słyszałem o tym module (opieram się jedynie teraz na manualu php). Z tego co mi się wydaje dane będą przechowywane gdzieś w pamięci, więc folder cache nie będzie potrzebny?
Czy działanie takiej klasy powinno wyglądać mniej więcej tak?: Sprawdź czy istnieje cache przez apc_exists(), jeżeli tak, to pobiera je przez apc_fetch(), jeżeli nie to tworzy przy pomocy apc_store(). Całe cache kasowane będzie przy pomocy apc_clear_cache(), a elementy przy apc_delete()? Czy używając apc w cache mysql powinno się określać czas żywotności takiego cache? |
|
|
![]()
Post
#14
|
|
![]() Grupa: Zarejestrowani Postów: 125 Pomógł: 7 Dołączył: 27.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
http://files.ognisco.com/kickasscache/kickasscache-20110608
tutaj jest prosta klaska ktora realizuje cache z apc i jest zabezpieczona przed thread race -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 08:38 |