![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Od dawna stosowane są mechanizmy służące do zapisywania wyników z bazy danych w plikach tekstowych, w celu przyspieszenie pracy skryptów (cash). I jest to całkiem logiczne, szczególnie w przypadku bardziej złożonych zapytań.
Jednak ostatnio, chyba wraz z pojawieniem się najnowszej wersji xmb_forum (Partagium) zwróciłem uwagę na nową tendencję: zastępowanie plików tekstowych bazą danych. W forum tym wszystkie pliki szablonów (templates) zostały umieszczone w bazie. I przyznam się szczerze, że mocno mnie to zaskoczyło. Bo choć do zalet stosowania zapisu w bazie chyba nikogo nie trzeba przekonywać (łatwość w aktualizacji, katalogowaniu, brak problemów z nadawaniem CHMOD itp.) to jednak przekonany byłem, że rozwiązanie takie musi być o wiele wolniejsze. Skłoniło mnie to do przeprowadzenia serii testów. Umieszczam tu kilka z wyników, które mam nadzieję skłonią Was do zastanowienie się nad tym tematem. Wszystkie zostały wykonane przy pomocy malutkiego skryptu zapisującego i przeliczającego wyniki, który można ściągnąć stąd: www.mStudio.nQ.pl/download/scrypty/czas/czas.zip na Windows XP, z Apachem 1,3, php 4.3 oraz MySQL 3.23 A tu jest przykład kodu testów A1. wyświetlamy zawartość małego pliku (1,4 KB) z pliku tekstowego (wyniki w sekundach): Cytat Ilość prób=20
A2. Ten sam tekst z bazy MySQL zawierającej tylko ten jeden rekord:średni czas = 0.00299039483070 max czas=0.0046200752; min_czas= 0.0020439625 suma = 0.0598078966 Cytat Ilość prób=20
A3. Taki sam tekst, lecz z tabeli zawierającej około 200 rekordów
średni czas = 0.00293679833412 (mniej niż z pliku !) max czas=0.0047850609; min_czas= 0.0023930073 suma = 0.0587359667 Cytat Ilość prób=20
średni czas = 0.00319704413414 max czas=0.0045739412 min_czas= 0.0025489330 suma = 0.0639408827 ----------------------------- B1. wyświetlamy zawartość pliku (61 KB) z pliku tekstowego (wyniki w sekundach): Cytat Ilość prób=20
B2. Ten sam tekst z bazy MySQL zawierającej tylko ten jeden rekord:
średni czas = 0. 07095720171928 max czas=0. 1114130020; min_czas= 0. 0573480129 suma = 1. 4191440344 Cytat Ilość prób=20
B3. Taki sam tekst, lecz z tabeli zawierającej około 200 rekordów
średni czas = 0. 09079620242119 max czas=0. 1551539898; min_czas= 0. 0670330524 suma = 1. 8159240484 Cytat Ilość prób=20
Podsumowanie:
średni czas = 0. 08866938948631 max czas=0. 1459870338 min_czas= 0. 0688790083 suma = 1. 7733877897 Pliki rzeczywiście zazwyczaj są szybsze, ale nie tak bardzo, jak by się mogło wydawać. Zaskakujące efekty dało również porównanie wyników MySQL. Okazało się, że wielkość bazy (przynajmniej w porównaniu 1-200) nie ma wpływu na prędkość wykonywania zapytań. Czasami wręcz (sic!) większa baza jest szybsza... Co o tym sądzicie? |
|
|
![]()
Post
#2
|
|
Grupa: Zarząd Postów: 1 512 Pomógł: 2 Dołączył: 22.04.2002 Skąd: Koszalin ![]() |
Jezeli chodzi o mnie to ja zawsze bylem bazodanowcem i wszystko pakowalem w baze. mySQL daje to czego z txt nie osiągniesz - dane statystyczne - praca z baza z zalozenia jest znacznie latwiejsza.
Szybkosc otwierania strony to jeden z glownych czynnikow na ktory zwraca uwage uzytkownik internetu. I w momencie kiedy mySQL szwankuje na serverze to czas otwierania strony moze maaaaxymalnie sie zwiekszyc. Dzis mialem ta przykrosc na home.pl (wielki dostawca ale mySQL szwankuje tam juz od tygodnia). Konczac jestem zawsze i wszedzie za baza danych .... Pozdrawiam |
|
|
![]()
Post
#3
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
Odkąd przerzucilem sie z plików na BD, to nie mam zamiaru wracać. Od zawsze otwieranie, zamykanie i operacje na plikach byly czyms czego nie lubiłem. A to że czasami troszke wolniejsze? Niech będzie i wolniejsze, jesli tylko jest wygodniejsze.
|
|
|
![]()
Post
#4
|
|
Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
Jednak pojawia się pytanie: Jak daleko się posuwać?
Przecież można by w bazie przechowywać praktycznie wszystko. Już wspomniałem o plikach cashu - może zamiast plików warto by używać mechanizmów zapisujących wyniki trudniejszych zapytań z bazy właśnie w bazie? Na innym Topicu na tym forum poruszony jest temat przechowywania zmiennych sesjowych w bazie. Czy ma to sens? A może posuniemy się do skrajności, i zaczniemy przechowywać w bazie również pliki, choćby grafikę? Czy gdzieś tu zaczyna się paranoja? |
|
|
![]()
Post
#5
|
|
Grupa: Przyjaciele php.pl Postów: 786 Pomógł: 0 Dołączył: 18.03.2002 Skąd: Wroclaw/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Cytat Od dawna stosowane są mechanizmy służące do zapisywania wyników z bazy danych w plikach tekstowych, w celu przyspieszenie pracy skryptów (cash).
cos co moze umkleo - kiedy umiejetnie cachujemy "ile sie da" wyniki skryptow (chociaz ich fragmentow) jestesmy nie tylko dostarczyc tresc szybciej ale i funkcjonowac w miare stabilnie gdy wlasnie zabraklo bazy danych (np padla). wczoraj uswiadomilem sobie ze jesli wystarczajaco dobrze sie usiadzie to nawet gdy bedziemy mieli krytyczne padniecie bazy danych seriws bedzie chodzil zachowujac wszystkie pozory. |
|
|
![]()
Post
#6
|
|
Grupa: Przyjaciele php.pl Postów: 398 Pomógł: 0 Dołączył: -- Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Prędkość liniowego odczytu danych z bazy jest zwykle porównywalna z odczytem z systemu plików. Tutaj nie ma co szukać przewagi któregoś z rozwiązań - jeśli wszystko jest dobrze skonfigurowane to różnice powinny być na poziomie błędu statystycznego.
Co innego jeśli chcemy czegoś poszukać - tutaj baza jest absolutnie bezkonkurencyjna. Dlatego jeśli potrzebujemy wydajności, najlepiej trzymać co się da w bazie danych i zadbać równocześnie o to, żeby sama baza i sprzęt na którym pracuje były skonfigurowane optymalnie. Na co warto zwrócić uwagę? Jeśli to możliwe, należy przygotować sobie osobną maszynę dla bazy danych i połączyć szybką sieciówką z serwerem www. Najważniejszymi elementami serwera bazodanowego są dyski twarde i pamięć ram. Jeśli chodzi o dyski to świetnie podnosi wydajność konfiguracja typu raid-0. Jeśli musimy liczyć się z kosztami to możemy zacząć od kupna płyty głównej z kontrolerem raid (zwykle różnica cenowa jest niewielka) i dwóch identycznych dysków twardych ATA. Dobrze jeśli dysk ma 8MB cache - przy intensywnym użytkowaniu jest to ważne. Dla przykładu w hurtowni Maxtor DiamondMax +9 80 GB (ATA/133, 8MB cache) kosztuje około 500 PLN. Połączenie dwóch takich dysków w system raid-0 daje nam jeden dysk o pojemności 160GB, w dodatku o wydajności 195% pojedynczego. Jeśli ktoś cierpi na nadmiar gotówki to polecam specjalny kontroler scsi raid i do tego kilka dysków takich jak np. Seagate Cheetah X15K.3 36.7 GB - to cudeńko ma 15.000 obr./min i średni czas dostępu na poziomie 4,3 ms - tylko niestety słono kosztuje. Ram powinien być szybki, ale nie należy przesadzić. DDR-433MHz Corsair we wspólpracy z Athlonem 2000+ zachowuje się nieprzewidywalnie. Najlepiej zadbać po prostu o synchronizację procesora z ramem. Czyli np. Athlon 2600+ (szyna 333MHz) i DDR-RAM Kingston'a 333MHz to najzdrowsze zestawienie. Kilka słów o konfiguracji MySQL'a. Zakładam, że jeśli ktoś wydał kasę na sprzęt to teraz chce oszczędzić na sofcie i instaluje na serwerze linuxa - słuszne posunięcie. :wink: (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Jak powinien wyglądać plik konfiguracyjny MySQL'a? Oczywiście muszą w nim być podstawowe informacje: Kod [mysqld] Logi mogą nam oczywiście zacząć rosnąć w niepochamowanym tempie, w związku z czym trzeba pomyśleć o ich rotacji. Jeśli chodzi o dostosowywanie ustawień bazy danych do specyfiki sprzętowej to warto zerknąć do przykładów w podkatalogu /support-files. Dobre dobranie buforowania pozwoli nam wycisnąć ze sprzętu co się da. Jeśli mamy niezbyt wydajną platformę sprzętową nasz plik my.cnf może wyglądać tak:#kodowanie znaków language = polish default-character-set = latin2 #katalog z danymi datadir = /home/mysql/data #pliki logów log = /var/log/mysql/mysqld.log log-update = /var/log/mysql/modify.log Kod #Ustawienia globalne klientów Jeśli natomiast kupiliśmy sobie mocny serwer to musimy umożliwić mysql'owi wykorzystanie go odpowiednio. Co warto więc zmodyfikować? [client] #password = your_password port = 3306 socket = /tmp/mysql.sock #Ustawienie serwera [mysqld] language = polish default-character-set = latin2 datadir = /home/mysql/data log = /var/log/mysql/mysqld.log log-update = /var/log/mysql/modify.log port = 3306 socket = /tmp/mysql.sock skip-locking set-variable = key_buffer=16M set-variable = max_allowed_packet=1M set-variable = table_cache=64 set-variable = sort_buffer=512K set-variable = net_buffer_length=8K set-variable = myisam_sort_buffer_size=8M #log-bin server-id = 1 [mysqldump] quick set-variable = max_allowed_packet=16M [mysql] no-auto-rehash [myisamchk] set-variable = key_buffer=20M set-variable = sort_buffer=20M set-variable = read_buffer=2M set-variable = write_buffer=2M [mysqlhotcopy] interactive-timeout Kod #w sekcji mysqld To tyle w zarysie jeśli chodzi o wydajność samej bazy danych.
[mysqld] set-variable = key_buffer=384M set-variable = table_cache=512 set-variable = sort_buffer=2M set-variable = record_buffer=2M set-variable = thread_cache=8 set-variable = myisam_sort_buffer_size=64M #jeśli mamy więcej niż 1 procek set-variable = thread_concurrency=8 #w sekcji myisamchk [myisamchk] set-variable = key_buffer=256M set-variable = sort_buffer=256M |
|
|
![]()
Post
#7
|
|
Grupa: Przyjaciele php.pl Postów: 2 335 Pomógł: 6 Dołączył: 7.03.2002 Ostrzeżenie: (0%) ![]() ![]() |
A co sadzicie o XMLu jako pewnym zamienniku bazy danych przy malych projektach ?
P.S. Doszyly mnie sluchy, ze nowy system Redmonda ma posiadac system plikow oparty o baze danych, tak wiec to co mowicie o przechowywyaniu plikow graficznych itp w bazie chyba ma jakies uzasadnienie. Poza tym sam w pracy mam doczynienia z systemem plikow opartych o baze danych. |
|
|
![]()
Post
#8
|
|
Grupa: Przyjaciele php.pl Postów: 398 Pomógł: 0 Dołączył: -- Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Od biedy można spróbować posłużyć się XML'em jako zamiennikiem bazy danych ale musisz wtedy obsłużyć wszystkie operacje wyszukiwania, dodawania i zamiany na poziomie php, a takie technologie jak XMLQuery są jeszcze bardzo niedojrzałe. Natomiast świetnie sprawdza się XML przechowywany w bazie danych. Do pewnego poziomu abstrakcji przechowujesz dane w polach bazy danych, a poniżej tego poziomu w XMLu (w jednym z pól bazy). Np. przechowując artykuły możesz datę publikacji, tytuł i autora przechowywać w osobnych polach, a sam artykuł z podziałem na paragrafy, sekcje, cytaty, słowa kluczowe itd. trzymać w jednym z pól w XML-u. W Oracle'u możesz nawet wydawać zapytania do wnętrza tego XML'a ale jak wiadomo na komercyjną licencję Oracle'a mało kogo stać. Postgres jeszcze tego nie umie (o MySQL'u nawet nie wspominam, bo projektanci głośno się wypowiedzieli, że nawet nie mają planów się za coś takiego brać). Mimo wszystko jest to wygodne. Można sobie wyszukać co trzeba z bazy, a potem XML + parser z php zapewnią prawidłowe formatowanie itp.
|
|
|
![]()
Post
#9
|
|
Grupa: Przyjaciele php.pl Postów: 2 335 Pomógł: 6 Dołączył: 7.03.2002 Ostrzeżenie: (0%) ![]() ![]() |
Czyli XML tylko jako wzorzec ?
|
|
|
![]()
Post
#10
|
|
Grupa: Przyjaciele php.pl Postów: 398 Pomógł: 0 Dołączył: -- Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
No, powiedzmy jako źródło informacji na poziomie szczegółowym.
|
|
|
![]()
Post
#11
|
|
Grupa: Przyjaciele php.pl Postów: 2 335 Pomógł: 6 Dołączył: 7.03.2002 Ostrzeżenie: (0%) ![]() ![]() |
juz rozumiem
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 0 Dołączył: 25.06.2002 Skąd: Koszalin Ostrzeżenie: (0%) ![]() ![]() |
Ja tam uważam, że każdy musi subiektywnie podejśc do tego zagadnienia. Uświadomoić sobie co jest dla niego ważniejsze = wygoda tworzenia, czy mikrosekundowe zyski w oglądaniu.
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 29.03.2003 Skąd: Poznan :P Ostrzeżenie: (0%) ![]() ![]() |
Heh. Nie wiem co powiedziec.
Na plikach zaczynalem ale to przeszlosc. Potem dlugo dlugo mysql. Ostatnim czasem jednak nie korzystam z mysqla. Zaczalem uzywac PostgreSQLa i Interbase'a(FireBird). Aktualnie mam na swoim 486 80 MHz 16 MB Ramu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) odpalonego php 4.2.3 i Psosstgresa 7.2 + FireBird juz nie pamietam jaki (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) . okolo 1-3 minut zajmuje mi wylistowanie 20000 rekordow z warunkiem (WHERE KOD=.....). Podobny okres czasu zajmuje mi wylistowanie WHERE + LIKE kilka razy (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) . To na Interbasie - jego odpowiedniku FireBirdzie. Własnie importuje 20000 rekordow do PostgreSQLa w ktorym robilem juz kilka rzeczy, chce porownac ich szybkosci. MySQLa porzucilem bo nie daje juz takich mozliwosci, poza tym do zastosowan komercyjnych trzeba miec na niego licencje.... Brakuje mi w ankecie czegos takiego jak Bazy Danych inne niz mysql (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) . Pozdrawiam |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 273 Pomógł: 0 Dołączył: 5.05.2003 Skąd: Mazury Ostrzeżenie: (0%) ![]() ![]() |
W sumie pliki są bardziej powszechne... W necie o free MySQL dość trudno... A dla małych porcji informacji pliki to niezłe wyjście... Ale osobiście przystaję za MySQL... 8)
|
|
|
![]()
Post
#15
|
|
Grupa: Przyjaciele php.pl Postów: 195 Pomógł: 0 Dołączył: 7.07.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Cytat MySQLa porzucilem bo nie daje juz takich mozliwosci
Jakich konkretnie? Pytanie troche podchwytliwe, wiem czego brakuje w MySQL, ale uwazam, ze w wiekszosci zastosowan widoki nie sa niezbedne, a subquery, tranzakcje itp. juz MySQL 4.1 ma. Natomiast z cala pewnoscia MySQL jest najszybszy z wymienionych. Cytat , poza tym do zastosowan komercyjnych trzeba miec na niego licencje....
O... to ciekawe. Mozesz podac odpowiedni fragment licencji? Kiedys trwala o tym dyskusja na pl.comp.www i stanelo na tym, ze jednak nie jest potrzebna. Ze platna licencja jest potrzebna, tylko kiedy MODYFIKUJESZ zrodla MySQLa. |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 273 Pomógł: 0 Dołączył: 5.05.2003 Skąd: Mazury Ostrzeżenie: (0%) ![]() ![]() |
Z tego co wiem płatna licencja jest potrzebna gdy za MySQL pobiera sie pieniądze czy jakoś tak...
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 29.03.2003 Skąd: Poznan :P Ostrzeżenie: (0%) ![]() ![]() |
Wlasnie najbardziej potrzebne mi sa widoki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) (laczenie tabel i inne...) Mozliwosc implementacji skryptow perlowych, laczenia tabeli....
Druga sprawa jest to, ze tak narawde licencji nie czytalem, ale ostatnio bardzo duzo grup dyskusyjnych zwiedzalem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) a tam kilka razy bylo to poruszane, ale potem tego sam poszukam w warunkach licencyjnych (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Fakt faktem ze mysql jest najprostszy (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 260 Pomógł: 0 Dołączył: 18.07.2003 Skąd: Tarnów Ostrzeżenie: (0%) ![]() ![]() |
ja tam jestem za mysql
po 1. 0.001 sek to dla mnie niezbyt duzo, a wygoda jest o wieeele wieksza. po 2. pliki zawsze doprowadzaly mnie do szalu po 3. jak sie ma szybkiego serwa to tylko wygoda sie liczy (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) |
|
|
![]()
Post
#19
|
|
Grupa: Przyjaciele php.pl Postów: 195 Pomógł: 0 Dołączył: 7.07.2003 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Cytat po 3. jak sie ma szybkiego serwa to tylko wygoda sie liczy (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
I jeszcze mala odwiedzalnosc... Gratuluje pomyslu. Przyszlosc programisty, dla ktorego najwazniejsza jest wygoda jest zaprawde swietlana. |
|
|
![]()
Post
#20
|
|
Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 3.07.2003 Skąd: Szczecin->niebuszewo->*(next to window) Ostrzeżenie: (0%) ![]() ![]() |
Cytat Jednak pojawia się pytanie: Jak daleko się posuwać?
A może posuniemy się do skrajności, i zaczniemy przechowywać w bazie również pliki, choćby grafikę? Czy gdzieś tu zaczyna się paranoja? Wg mnie nie ma tu paranoi trzymanie grafiki w bazach danych to nie nowosc i w pewnych sytuacjach moze sie przydac. Co do predkosci i wydajnosci (jedno i to samo?) pliki nadaja sie do mniejszych stron ale jesli wiecej uzytkownikow kozysta z serwisy baza jest niezbedna chocby ze wzgledu na kolejkowanie zapytan typu insert i select oraz ich priorytety, bazy danych optymalizuja rowniez zapis fizyczny na dyskach inteligentnie rozmieszczajac dane (jak ktos wie co to sa B-drzewa to wie o czym mowie innych odsylam do podrecznikow algorytmiki;-)). |
|
|
![]()
Post
#21
|
|
Grupa: Zarejestrowani Postów: 273 Pomógł: 0 Dołączył: 5.05.2003 Skąd: Mazury Ostrzeżenie: (0%) ![]() ![]() |
Pliki są wygodniejsze nie tylko dla mn iejszych stron ale i dla mniejszych skryptów...
|
|
|
![]()
Post
#22
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 25.05.2003 Ostrzeżenie: (0%) ![]() ![]() |
cale rozwazania tocza sie nad przewaga plikow nad baza (czy tez odwrotnie) w trzymaniu danych takich jak grafika - ale niewiedziec czemu nikt nie wspomnial tu o jednej dosc istonej rzeczy - zamiast trzymac grafike, jezyk, etc na dysku mozna to wszystko wrzucic do pamieci,
grafika + jezyk z calej strony przewaznie nie zajmuje wiecej jak kilka M - dla przykladu jezyk z phpBB jesli mnie pamiec nie myli zajmuje raptem kilkadziesiat K, pojedynczy theme to jakies kilkaset k (galeria avatarow, czy jakakolwiek galeria na stronie to oczywiscie inna para kaloszy) dosc duza gra internetowa RedDragon ma grafike ktora zajmuje niecale 2M i mimo ze wspiera 4 jezyki to w sumie wszystkie zwroty zajmuja kilkaset k (200k o ile dobrze pamietam) - to stosunkowo niewiele nawet dla najslabszych serverow - a trzymanie wszystkiego na stale w pamieci powinno w dosc duzym stopniu odciazyc dysk dla jezyka i jemu podobnych danych warto zastanowic sie nad uzyciem bazy z tabela przechowywana w pamieci - dodatkowo indexowanie zapewnia nam nie tylko szybszy dostep ale i wyszukuwanie (wspomniane b-drzewa) z grafika jest juz gorzej bo nie da sie tego trzymac w tabelach przechowywanych w pamieci (a moze jest jakis sposob? ) - programista z ktorym wspolpracuje napisal ostatnio prosty serverek ktorego jedynym zadaniem jest trzymanie grafiki - i tak caly html leci z apache'a, a grafa przez inny port takie rozwiazanie wydaje mi sie najszybsze, choc napewno nie najprostrze - a moze ktos ma inny/lepszy pomysl na przechowywanie tego typu danych? |
|
|
![]()
Post
#23
|
|
Grupa: Zarejestrowani Postów: 83 Pomógł: 0 Dołączył: 31.03.2002 Skąd: Toruń Ostrzeżenie: (0%) ![]() ![]() |
Jaką pamięć masz na myśli? Mówisz o shared memory czy o własnym serwerze, który trzyma w pamięci dane, udostępniane na żądanie? Na takie rozwiązanie mało kto może sobie pozwolić.
|
|
|
![]()
Post
#24
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 7.01.2004 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Cytat Z tego co wiem płatna licencja jest potrzebna gdy za MySQL pobiera sie pieniądze czy jakoś tak...
Konkretnie to jeżeli sprzedajesz dany produkt z instalką MySQL. Jeżeli mówisz klientowi - musi sobie pan sam zainstalowac serwer MySQL, wtedy nie ma problemu. |
|
|
![]()
Post
#25
|
|
Grupa: Zarejestrowani Postów: 70 Pomógł: 0 Dołączył: 22.10.2003 Skąd: Trójmiasto Ostrzeżenie: (0%) ![]() ![]() |
Z MySQLem jest tak, ze tak na prawde jest bardzo wydajny ale mam wrazenie ,ze czesto ludzie nie potrafia albo go odpowiednio skofigurowac albo dobrze zoptymalizowac tabel (szczegolnie odpowiednie indeksy ale tez dlugosc pol [mozna stosowac char zamiast varchar] stosowanie likeow z % z przodu [zabojcze ale tez da sie to zrobic] itp). Niejednokrotnie spotkalem sie z w ogole nieoptymalizowana baza gdzie zapytania wykonywaly sie kilka (sic!) a nawet nascie sekund. To jest niedopuszczalne! Dzialo sie to na bazie z 20 tys rekordow a pracowalem rowniez na bazach z milionami rekordow - tam juz trzeba ostro optymalizowac - ale jak praktyka pokazuje - się da...
Co do licencji na MySQLa to owszem trzeba go kupic ale tylko jesli dolacza sie jego zrodla do programu ktory sprzedajemy. Co raczej nie dotyczy ludzikow uzywajacych php. Fakt jest natomiast taki, ze w MySQLu ciagle brakuje wsparcia dla UTFa (przynajmniej w wersji produkcyjnej) nad czym bardzo ubolewam - natomiast wydajnosciowo wypada niezle - czasami tylko trzeba troche poglowkowac, czesto okazuje sie, ze niektore obliczenia moze wykonac sam php o wiele szybciej. Jesli ktos bedzie zainteresowany moge podac przyklady. |
|
|
![]()
Post
#26
|
|
Grupa: Zarejestrowani Postów: 127 Pomógł: 0 Dołączył: 19.11.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Z doświadczenia polecam stosowanie squid-a w roli reverse proxy i ogranicznie logowania z apache,mysql,squida prawie do zera - zapis logów dowala trochę maszynie (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)
|
|
|
![]()
Post
#27
|
|
Grupa: Zarejestrowani Postów: 259 Pomógł: 0 Dołączył: 17.05.2003 Skąd: Nysa Ostrzeżenie: (10%) ![]() ![]() |
Cytat Z MySQLem jest tak, ze tak na prawde jest bardzo wydajny ale mam wrazenie ,ze czesto ludzie nie potrafia albo go odpowiednio skofigurowac albo dobrze zoptymalizowac tabel (szczegolnie odpowiednie indeksy ale tez dlugosc pol [mozna stosowac char zamiast varchar] stosowanie likeow z % z przodu [zabojcze ale tez da sie to zrobic] itp). Niejednokrotnie spotkalem sie z w ogole nieoptymalizowana baza gdzie zapytania wykonywaly sie kilka (sic!) a nawet nascie sekund.
A i owszem, znaczna część koderów PHPa bazy danych okjarzy tylko z SQL'em i nawet nie wie, że to tylko narzędzie, a cała zabawa polega na projektowaniu samej struktury bazy, na procesie normalizacji etc. Z drugiej jednak strony, czasem nie można pozwolić sobie na 3 formę normalną, bo kończy się to robiciem tabeli na kilka i albo zapytaniami złożonymi albo kilkoma następującymi po sobie zapytaniami, w celu wyciągniecia konkretnej porcji danych... Na wszystko jest odp. miejsce i czas (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#28
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 24.02.2004 Skąd: Ornontowic (jak kto spyta gdzie to jest to zabije) Ostrzeżenie: (0%) ![]() ![]() |
Ja używam plikuw *.php jako bazy i mam to co z txt tylko szypszy otczyt.
Do odczytu includuje plik z bazom o mniej więcej takim schemacie: [php:1:23a0b21ab0]<?php $zmienna=array(); $zmienna[0]="cos"; $zmienna[1]="costam"; ?>[/php:1:23a0b21ab0] A do zapisu to otwieram plik fopen()'em |
|
|
![]()
Post
#29
|
|
Grupa: Zarejestrowani Postów: 259 Pomógł: 0 Dołączył: 17.05.2003 Skąd: Nysa Ostrzeżenie: (10%) ![]() ![]() |
Cytat Ja używam plikuw *.php jako bazy i mam to co z txt tylko szypszy otczyt....
A do zapisu to otwieram plik fopen()'em Mimo wszystko na plikach nie mas zdo dyspozycji SQL'a (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) Napisanie nawawet najprostrzego skryptu operującego na bazie jest dużo wygodniejsze niż napisanie takiegoż samego skryptu pracującego na plikach. No i pozostaje pytanie, czy porwałbyś się pisać serwis średniego rodzaju, który składa się np. z 10-15 sekcja, zawartość każdej z nich generowana dynamicznie i każdą z sekcji można zarządzać z poziomu WWW etc. ? Dla mnie to by było samobójstwo, gdyby któs chciał żebym mu napisał cały serwis na plikach to bym chyba umarł ze śmiechu... (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) |
|
|
![]()
Post
#30
|
|
Grupa: Zarejestrowani Postów: 115 Pomógł: 0 Dołączył: 3.05.2003 Skąd: Łódź Ostrzeżenie: (0%) ![]() ![]() |
Witam!!
Ja na serverze nie mam dostępu do bazy danych, ale nie przeszkodziło mi to, w napisaniu servisu opartego o pliki. Jest rozbudowany panel administracyjny, 4 działy i wszystko się dynamicznie wyświetla, sortuje, wyszukuje. To w gruncie rzeczy nie jest takie trudne ;P |
|
|
![]()
Post
#31
|
|
Grupa: Zarejestrowani Postów: 127 Pomógł: 0 Dołączył: 19.11.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Tak wlasnie sobie to czytam i pomyslalem że cała dyskusja nie ma większego sensu - jest próbą podwarzenia czegoś na czym pracuje cały świat i miliardów dolarów które zarobił np. oracle (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Baza danych będzie zawsze bazą danych i NIE MOŻNA porównywać tego z przetrzymywaniem danych w plikach. Dobra baza danych to nie tylko SQL, to funkcje, triggery, transakcje, środowiska w stylu Oracle Forms itp itd.... Wiem że to kosztuje - ale jeśli jest ktoś kto jest gotów za to zapłacić to znaczy że ma to sens.
|
|
|
![]()
Post
#32
|
|
Grupa: Zarejestrowani Postów: 740 Pomógł: 15 Dołączył: 23.08.2004 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Powtorze za poprzednikiem, że nie ma sensu prowadzic tej dyskusji bowiem BD to nic innego jak pliki tylko wzbogacone o pewna funkcjonalnosc, ktorej nie sposob przecenic. Mozna sie bawic w pliki jezeli nie mamy dostepu do serwera bazy ale to tak samo jak z uzywaniem recznej pily jak sie nie ma gumowki. Jak chcesz przyciac listewke to brzeszczot moze okazac sie szybszy od pily elektrycznej, ktorej samo uruchomienie i przygotowanie do pracy zajmuje troche czasu, ale sprobuj przy pomocy brzeszczota zrobic zestaw mebli kuchennych.
Co do przechowywania grafik, plikow dzwiekowych, czy filmow w BD to ten pomysl nie jest wcale nowy. W koncu pocos wymyslono obiektowe bazy danych. Natomiast mam prosbe do dooshek Cytat ...czesto okazuje sie, ze niektore obliczenia moze wykonac sam php o wiele szybciej. Jesli ktos bedzie zainteresowany moge podac przykl ady. Jestem zainteresowany, ktore obliczenia lepiej powierzyc BD, a ktore php |
|
|
![]()
Post
#33
|
|
Grupa: Przyjaciele php.pl Postów: 1 224 Pomógł: 40 Dołączył: 6.07.2004 Skąd: Wuppertal Ostrzeżenie: (0%) ![]() ![]() |
Pisalem ostatnio database_layer z automatyczną obsługą cachowania...
Narazie działa 3 razy wolniej:P niz sam mysql ale jak popracuje nad zamianą serialize() w pętlach na cos wydajniejszego to sie zacznę zastanawiac czy nie zacząc tego uzywac... Pozatym jestem zdania ze przy naprawde prostych skryptach nie warto uzywac baz danych np. Licznik (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) |
|
|
![]()
Post
#34
|
|
Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 3.07.2003 Skąd: Szczecin->niebuszewo->*(next to window) Ostrzeżenie: (0%) ![]() ![]() |
Cytat(bigZbig @ 2004-08-26 15:52:19) Natomiast mam prosbe do dooshek Cytat ...czesto okazuje sie, ze niektore obliczenia moze wykonac sam php o wiele szybciej. Jesli ktos bedzie zainteresowany moge podac przykl ady. Jestem zainteresowany, ktore obliczenia lepiej powierzyc BD, a ktore php Hmmm, zawsze sie uczylem zeby wszystko co jest mozliwe do wykonania przez baze powierzyc wlasnie jej co wydawalo mi sie logiczne bo. np. kod w c dziala szybcej, baza sama wiec jak skladuje dane i jak najlepiej cos obliczyc nie popbierajac zbednych rekordow jakie byc moze do php trzeba by zwrocic, poza tym optymalizacja - baza danych to takie cos gdzie nie zajmujesz sie jak cos uzyskach tylko powierzasz to bazie danych a setki (tysiace) proramistow tej bazy mysli nad tym jak to zoptymalizowac, dostosowac i zwrocici iednemu userowi to co sobie wymarzyl |
|
|
![]()
Post
#35
|
|
Grupa: Zarejestrowani Postów: 848 Pomógł: 0 Dołączył: 7.07.2004 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
W bazie po prostu piszesz zapytanie, a baza zwraca wynik... na plikach trudniej jest zrobić coś takiego w dwóch liniach, i to do tego tak przejrzysto.
|
|
|
![]()
Post
#36
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 0 Dołączył: 16.11.2004 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Cytat Z MySQLem jest tak, ze tak na prawde jest bardzo wydajny ale mam wrazenie ,ze czesto ludzie nie potrafia albo go odpowiednio skofigurowac albo dobrze zoptymalizowac tabel (szczegolnie odpowiednie indeksy ale tez dlugosc pol [mozna stosowac char zamiast varchar] stosowanie likeow z % z przodu [zabojcze ale tez da sie to zrobic] itp). Niejednokrotnie spotkalem sie z w ogole nieoptymalizowana baza gdzie zapytania wykonywaly sie kilka (sic!) a nawet nascie sekund. A i owszem, znaczna część koderów PHPa bazy danych okjarzy tylko z SQL'em i nawet nie wie, że to tylko narzędzie, a cała zabawa polega na projektowaniu samej struktury bazy, na procesie normalizacji etc. To prawda. Wiedza (wraz z zastosowaniem), czym sie rozni zklastrowane drzewo B+ od indeksu mieszajacego, moze czasem zwiekszyc wydajnosc zapytan o kilka rzedow wielkosci, ale co na to poradzic, kiedy w zwyklym manualu normalnie o takich rzeczach nie pisza. Pytanie jeszcze, czy i jak syst. BD pozwoli te wiedze wykorzystac. Natomiast nikt nie wymienil tu jeszcze jednej waznej rzeczy dla ktorej stosuje sie bazy danych: niezawodnosci. Jesli przechowujemy jakies dane w pliku, to mozemy je latwo popsuc/zgubic itd. Jesli przechowujemy je w BD to tez, ale dobre syst. baz danych (Oracle, DB/2, MSSQL, no i ujdzie jeszcze PostgreSQL) daja zwykle porzadny zestaw narzedzi umozliwiajacych uzyskanie bezpieczenstwa danych nawet w przypadku wylaczenia pradu w czasie wykonywania zapytania typu UPDATE. Mysle, ze nawet w przypadku malego sklepu internetowego moze to byc istotne. Nikt chyba nie chcialby, zeby mu oferta kilku tysiecy produktow "poszla z dymem". Cacheowanie grafiki w pamieci: to jest to co tygryski lubia najbardziej. Nalezaloby to dodac do "wishlisty" php. |
|
|
![]()
Post
#37
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 4.11.2004 Ostrzeżenie: (0%) ![]() ![]() |
mysql -> dane
pliki cache -> buforowanie |
|
|
![]()
Post
#38
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 19.10.2004 Skąd: Opole Ostrzeżenie: (0%) ![]() ![]() |
To mój pierwszy post na Forum php Pro. Oby wyszedł dobrze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Ponieważ w mojej pracy dyplomowej mam do czynienia z dużą ilością cache-owalnych danych różnego rodzaju (wygenerowane strony, pliki XML, starsze statystyki) postanowiłem przeprowadzić test porównawczy dla różnych rodzajów danych. Test składa się z 3 plików, 1 jest tworzony podczas pracy. Więcej szczegółów w źródłach. Wyniki pracy na moim komputerze (Celeron 800, 394MB RAM, Win XP Prof, php 5.0.2): Include z kodem php: 5.17731785774 Plik z 'serializowana' tablica: 3.72141003609 Tabela MySQL z 'serializowana' tablica: 4.31501793861 Pamięć współdzielona: 0.0416531562805 Edit: Link do zipa z plikami testu: http://shaxbee.net/benchmark.zip - tym razem Dziala (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Plik benchmark.php
Plik testinclude.php
Plik bench.sql
Czekam na opinie i komentarze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Ten post edytował ShaXbee 20.01.2005, 13:18:49 |
|
|
![]()
Post
#39
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat [Error : Błąd] [404] File Not Found : Plik nie istnieje a propo (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#40
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Pomijając prostą kwestię istnienia lub nie istnienia plików (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) , dochodzimy do prostego wniosku: (de)serializacja jest szybsza niż czysty kod php. I to jest dla mnie ważne. Sam to kiedyś zauważyłem i przerobiłem swój framework. Czytasz XMLa, przerabiasz na obiekt, serializujesz i dalej jest to już szybsze niż napisanie tego samego w php.
|
|
|
![]()
Post
#41
|
|
Grupa: Zarejestrowani Postów: 29 Pomógł: 0 Dołączył: 19.10.2004 Skąd: Opole Ostrzeżenie: (0%) ![]() ![]() |
I tu tkwi problem. Uzywam PHP5 i SimpleXML. Niestety po dokonaniu serializacji obiektu z danymi, zapisaniu na dysku i ponownym odtworzeniu wszystko sie sypie. Powod? Brak jawnej definicji obiektow uzytych w SimpleXML. Mozna to jakos obejsc?
Edit: No i jeszcze jedna sprawa - zacząłem tworzyć klasę umożliwiającą przetrzymywanie 'wirtualnych' plików w shared memory (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Pytanie tylko czy przy odczytywaniu max. 10 'zserializowanych' plikow warto tego uzywac... Zastanawiam sie takze nad napisaniem wlasnego cache handlera w smarty - kazdy output (tak nazywam to co wypluwa z siebie akcja) mialby swoj licznik odwolan i np. 20% najczesciej wywolywanych i przekraczajacych okreslona wartosc stron byloby przechowywanych w shared memory. Ten post edytował ShaXbee 20.01.2005, 13:22:58 |
|
|
![]()
Post
#42
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
Co do SimpleXML: to jest znany bug php. Workaround: nie serializować SimpleXML. Wydaje mi się, że kiedyś podawałem na tym forum linki do szczegółowego opisu.
Co do shm: a czemu nie użyć po prostu tmpfs? Zaleta: niezależny od rozszerzeń php i od kodu serwisu w ogóle. |
|
|
![]()
Post
#43
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(hawk @ 2005-01-20 14:37:55) Co do shm: a czemu nie użyć po prostu tmpfs? Zaleta: niezależny od rozszerzeń php i od kodu serwisu w ogóle. @hawk czym jest tmpfs i daj jakis link (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#44
|
|
Grupa: Zarejestrowani Postów: 521 Pomógł: 0 Dołączył: 3.11.2003 Skąd: 3city Ostrzeżenie: (0%) ![]() ![]() |
System plików siedzący w pamięci. Link: http://www.google.pl. Wiem tylko że takie coś istnieje. Zresztą to na pewno nie jedyny system plików w pamięci - jest jeszcze chociażby głupi ramdisk.
|
|
|
![]()
Post
#45
|
|
Grupa: Zarejestrowani Postów: 53 Pomógł: 0 Dołączył: 16.11.2004 Ostrzeżenie: (0%) ![]() ![]() |
Linux automatycznie cache'uje pliki w pamieci. Jak jest dostatecznie duzo RAMu, to wszystkie uzywane pliki w koncu wyladuja w pamieci i prawdopodobnie bedzie to szybsze niz jakis wlasny mechanizm napisany w php. Dwa odczyty tego samego pliku pojda duzo szybciej niz dwukrotny czas pojedynczego odczytu. Systemy baz danych tez maja swoj cache - tylko trzeba go dobrze ustawic (nie moze byc za maly, ale tez i nie moze byc za duzy - bo niepotrzebnie bedzie zabieral miejsce, ktore system moglby wykorzystac rozsadniej).
Pamiec wspoldzielona jest chyba kiepskim pomyslem - co jak siadzie prad? Chyba ze tylko do trzymania plikow tymczasowych. Ale nieprzenosne i tez nie tak szybkie jak "normalna" pamiec procesu. I znowu dochodzimy do tego samego - przydalby sie porzadny serwer aplikacyjny dla php. |
|
|
![]() ![]()
Post
#46
|
|
Grupa: Zarejestrowani Postów: 358 Pomógł: 0 Dołączył: 3.07.2003 Skąd: Szczecin->niebuszewo->*(next to window) Ostrzeżenie: (0%) ![]() ![]() |
MySQL i pewnie inne bazy ma typ tabeli ktora przetrzymuje w pamieci RAM nie znam szczegolow ale napewno zwieksza to wydajnac operacji i mamy wielodostep zapewniony przez SZBD (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]()
Post
#47
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
IMHO - dyskusja lekko pozbawiona sensu - trzebaby określi o jakiej wielkośći serwisie rozmawiamy - ja ostatnio obcuje z cache - czyli pliki i MySQl na spółke i jak narazie jes to najlepsze rozwiązanie - męczę się troche z przepisaniem layera aby współpracował w jakis sensowny sposób - ale jak dla mnie to jest właśnie przyszlość.
Inne moje doświadczenie - buduje system, ktory wszystko cachuje - chhoć jak pisałem, nie wiedziałem, że robie własne to. Owszem serwere musi torche mieć miejsca - ale działa calkeim fajnie - enginek generuje cache, w XML-ku mamy opisik co jest w tym cache i podrzucamy userowi input -> engine -> output - gdzie engine nie ma nic do gadania co jest wyświetlane. I widze, że takie rozwiązanie ma przyszłośc - tzn. cache (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) PS. Zmieńcie ankietę. |
|
|
![]()
Post
#48
|
|
Grupa: Zarejestrowani Postów: 40 Pomógł: 0 Dołączył: 4.11.2004 Ostrzeżenie: (0%) ![]() ![]() |
@squid chodzi ci pewnie o HEAP, jest jeden problem - nie mogą posiadać następujących typów kolumn TEXT, BLOB i auto_ increment no i trzeba jeszcze określać parametr max_rows
co do optymalizacji najlepiej sprawdzać zapytania za pomocą explain + buforowanie |
|
|
![]()
Post
#49
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Trochę odgrzeje jeśli można (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Co jest lepsze czysty parsing plikow .ini- czy tez cachowanie ich jako np. zserializowana tablica ? Ma ktoś jakieś doświadczenie ? |
|
|
![]()
Post
#50
|
|
Administrator PHPedia.pl Grupa: Developerzy Postów: 1 102 Pomógł: 2 Dołączył: 14.09.2003 Ostrzeżenie: (0%) ![]() ![]() |
Hwao gdzieś benchmark zrobił, poszukaj
|
|
|
![]()
Post
#51
|
|
Grupa: Zarejestrowani Postów: 179 Pomógł: 0 Dołączył: 8.10.2004 Ostrzeżenie: (0%) ![]() ![]() |
W moich testach zapisywanie zawartości pliku ini jako tablicę przez var_expor() i póżniejsze odczytywanie jest 2 razy szybsze od parowania plikow ini za kazdym razem.
|
|
|
![]()
Post
#52
|
|
Grupa: Zarejestrowani Postów: 2 262 Pomógł: 21 Dołączył: 3.05.2004 Skąd: Sopot, Krakow, W-wa Ostrzeżenie: (0%) ![]() ![]() |
Dzięki - u mnie też tak wynikło choć trochę nie chciało mi się wierzyć. A jednak prawda - test robiłem na jakimś pliku .ini z Windows'a (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 10.10.2025 - 14:21 |