2010-04-12 7 views
8

W dzisiejszych czasach robiłem wiele rzeczy do kalkulowania. Zazwyczaj wolę wykonywać te obliczenia w PHP niż w MySQL, choć wiem, że PHP nie jest w tym dobry. Myślałem, że MySQL może być gorszy. Ale znalazłem pewien problem z wydajnością: niektóre strony zostały załadowane tak wolno, że limit czasu 30 sekund nie jest dla nich wystarczający! Zastanawiam się, gdzie jest lepsze miejsce do obliczeń i zasad? Sugestie będą mile widziane.gdzie powinienem robić obliczenia, PHP lub Mysql?

+0

do obliczeń w C++ :) – Andrey

+2

Myślę, że potrzebujemy więcej informacji. Jakie rodzaje obliczeń robisz? – cmptrgeekken

+1

@ Andrey, agreed.if czy mogę ... – Young

Odpowiedz

22

Wszystko, co można zrobić za pomocą RDBMS (GROUPING, SUMMING, AVG), gdzie dane mogą być filtrowane po stronie serwera, powinno być wykonane w RDBMS.

Jeśli obliczenia byłyby bardziej odpowiednie w PHP, to dobrze, idź z tym, ale poza tym nie próbuj robić w PHP tego, do czego został stworzony RDBMS. PRZEGRASZ.

+2

ale nie zapomnij zasady wersetów wizowych: jeśli wykonujesz wiele obliczeń na jednym kawałku danych, to nie jest to dla db – Andrey

+6

Uczyniłbym to bardziej, gdybym mógł. OP-produkt mojej firmy często podsumowuje dziesiątki milionów wierszy na 1 000 lub mniej. Ich stacje robocze są zwykle systemami przeciętnymi w magazynie; ich serwery baz danych to 8- lub 16-rdzeniowe bestie z dziesiątkami gigabajtów pamięci RAM. Dlaczego mielibyśmy uruchamiać wszystkie te dane przez kabel i zgniatać je na maszynie o 1 lub 2 procesorach z ograniczoną pamięcią? Wykonuj pracę jak najbliżej danych. – DaveE

1

Powiedziałbym, że do obliczeń w językach, które zostały stworzone do tego, jak C++. Ale jeśli wybierzesz między mysql i php, php jest lepszy.

+3

Czy możesz opracować, co czyni go lepszym? –

+2

jest to lepsze, ponieważ mysql został stworzony do manipulacji danymi i dlatego jest zoptymalizowany pod kątem tego. silnik językowy nie jest tak dobry, jak php, ponieważ php został wykonany dokładnie dla skryptów. – Andrey

+1

To zależy od rodzaju obliczeń. Jeśli jest to matematyka wymagająca dużej mocy obliczeniowej lub arbitralnej precyzji, lepiej używać C/C++ z libgmp lub może Python. Jeśli jest to prosta agregacja, zrób to, co możesz w MySQL, nie czyniąc kodu MySQL niewiarygodnie złożonym, a resztę wykonuj w PHP. –

-2

Używaj PHP, nie marnuj swojego MySQL na niekończące się kalkulacje. Jeśli mówisz o takich rzeczach jak sortowanie OK, aby używać MySQL do takich rzeczy, SUMA, AVG, ale nie przesadzaj.

+3

w rzeczywistości, funkcje natywne MySQL są bardzo szybkie i często bardziej wydajne jest ich używanie zamiast ponownego przetwarzania "surowych" danych w PHP. Bardzo częstym tego przykładem jest arytmetyka Date. Z drugiej strony, sortowanie, zwłaszcza jeśli indeksy są niedostępne, może być zaporowo wolne i może, w niektórych przypadkach, być lepiej zrobione w PHP. – dnagirl

0

cmptrgeekken ma rację, potrzebowalibyśmy trochę więcej informacji. ALE jeśli potrzebujesz wykonać obliczenia odnoszące się do zapytań do bazy danych lub wykonując na nich operacje, porównujesz pola certyfikatów z bazy danych, zmodyfikuj bazę danych. Wykonywanie specjalnych zapytań w SQL to cheape r (jeśli chodzi o czas i jest zoptymalizowany pod kątem tego). Jednak zarówno PHP, jak i MySQL są po stronie serwera, tak naprawdę nie ma znaczenia, gdzie wykonujesz obliczenia. Ale jak już mówiłem wcześniej, jeśli są operowane na bazie danych, wykonaj bardziej skomplikowane zapytanie SQL i użyj tego.

0

Natywne funkcje MySQL są bardzo szybkie. Zrób to, co ma sens w Twoich pytaniach.

Jeśli masz serwery wielokrotne (tj. Serwer WWW i serwer DB), zauważ, że serwery DB są znacznie droższe od serwerów WWW, więc jeśli masz duży ruch lub bardzo zajęty serwer DB, nie rób tego. "dodatki", które można obsługiwać równie łatwo/wydajnie na maszynie serwera WWW, aby zapobiec spowolnieniu.

3

Zalecam wykonanie dowolnego obliczenia poziomu wiersza za pomocą RDBMS.

Nie tylko uzyskasz lepszą wydajność, ale także zwiększysz mobilność aplikacji, jeśli chcesz przełączyć się na inny język skryptowy, powiedzmy PHP na Python, ponieważ już sortowałeś, filtrowałeś i przetwarzałeś dane używając swojego RBDMS.

Pomaga także oddzielić logikę aplikacji, pomógł mi zachować czystość i czystość kontrolerów podczas pracy w środowisku MVC.

1

Wystarczy śledzić, gdzie znajdują się wąskie gardła. Jeśli stolik zostanie zablokowany, ponieważ próbujesz uruchomić niektóre obliczenia, wszyscy pozostali oczekują na odczyt/zapis danych w wybranych tabelach, a kolejka będzie dalej rosnąć.

MySQL jest zwykle szybszy w przetwarzaniu poleceń, ale PHP powinno być w stanie obsłużyć proste problemy bez zbytniego zamieszania. Oczywiście nie oznacza to, że powinieneś wielokrotnie sprawdzać pingi w bazie danych dla tych samych obliczeń w kółko.

Możesz lepiej buforować wyniki, jeśli możesz i zlecasz cronowi aktualizację go raz dziennie/godzinę (nie rób tego co minutę, Twój dostawca usług hostingowych prawdopodobnie Cię nienawidzi).

1

Wykonaj tak dużo filtrowania i scalania, jak to tylko możliwe, aby wprowadzić minimalną ilość danych do php. Gdy masz już ten minimalny zestaw danych, zależy to od tego, co robisz, obciążenia serwera i być może innych czynników.

Jeśli możesz zrobić coś równie dobrze w obu, a SQL nie jest zbyt skomplikowany, aby pisać (i utrzymywać), to rób to. Dla prostej matematyki sql jest zwykle dobrym zakładem. W przypadku manipulacji ciągami, w których łańcuchy kończą się na tej samej długości lub rosną, php jest prawdopodobnie dobrym zakładem.

Najważniejszą rzeczą jest zażądanie jak najmniejszej ilości danych. Manipulowanie danymi, przynajmniej to, co może zrobić sql, jest wtórne do pobierania i przesyłania danych.

Powiązane problemy