PHP czy MySQL?

0

Niektóre operacje na danych można wykonać zarówno przy pomocy PHP, jak i MySQL (np. MD5, MIN/MAX). Jeśli potrafimy skorzystać z obu rozwiązań, które należy wybrać? Od czego to zależy?

1

Operacje przy pomocy sql generalnie jeżeli dobrze napisane będą szybsze.

2

Jeśli masz na myśli operacje które wykonujesz na każdym rekordzie zwracanym (MD5, rok z daty, modulo) to jest to dyskusyjne.
Jeśli masz na myśli operacje na zbiorach typu redukcja (np. min/max, grupowanie) które zmniejszają liczbę zwracanych danych, to SQL będzie lepszy.

Ogólnie lepiej unikać pisania zbyt skomplikowanych zapytań (chyba że operujesz na bazach do 1000 rekordów) - ponieważ logika biznesowa powinna być w jednym miejscu a trudno mi sobie wyobrazić aplikację w całości napisaną w SQL.
Ale w przypadku nr 2 (zwykle) nie ma wyjścia.

2

zależy od użycia
w przypadku na przykład hashowania - lepiej to zrobić po stronie skryptu - po pierwsze zwiększa to możliwości, po drugie trzeba pamiętać że połączenie z bazą to kolejny element który można podsłuchać - jeżeli hasło będzie leciało plaintekstem i będzie hashowane do sprawdzenia po stronie bazy danych to ktoś może być w stanie poprzez atak MIDM przechwycić hasła

powinno się myśleć w kategorii ilości przesyłanych danych pomiędzy silnikiem bazy a aplikacją - im mniej tym lepiej

2

Operacje agregujące znacznie lepiej jest robić po stronie bazy danych. Niezależnie od "języka" skryptu. Ma to kilka zalet:

  • silniki SQL zazwyczaj są lepiej napisane i szybsze niż języki wyższego poziomu.
  • silniki SQL potrafią poradzić sobie z dużymi ilościami danych. Przykładowo pobranie MIN z 10GB danych (same dane do analizy) w SQLu działającym na maszynie z 2GB ram nie będzie problemem, bo silnik potrafi tak zarządzać pamięcią by nie zatkać się. W dowolnym innym języku wymaga to kombinowania.
  • od strony architektury pytasz o pewną informację, ale nie jest ona związana z logiką biznesową. Jest jej potrzebna (informacja logice), ale może żyć bez niej (informacja). Dzięki temu łatwo optymalizować pewne zapytania tak by logika działała na uproszczonych danych. kolejnym etapem jest polyglot data i event sourcing.

Operacje transformujące np MD5 jeżeli wykonywane są na pojedynczych danych znacznie lepiej wykonywać po stronie skryptu. Po pierwsze oszczędzasz zasoby bazy. Po drugie zazwyczaj taka transformacja jest elementem logiki związanej z pracą na danych, a nie ich składowania. Zatem bez tej operacji logika nie ma sensu.

0

Dziękuję za dotychczasowe odpowiedzi ;). Pozwolę sobie jeszcze zapytać jak sprawa wygląda w przypadku właściwości kolumn takich jak np. PRIMARY KEY, czy NOT NULL. Czasami już sam skrypt PHP i w ogóle konstrukcja aplikacji zapewniają, że do komórek zawsze będą trafiać dane (NOT NULL) i że będą one niepowtarzalne (PRIMARY KEY). Czy jest wówczas sens sprawdzać to raz jeszcze po stronie bazy?

0

Tak, bo skrypty nie zapewniają teak silnego modelu współbieżnego dodawania danych jak sam silnik bazy danych.

0

Jest sens. Bo przyjdzie ktoś kto spróbuje zmienić dane z palca i będziesz miał null mimo że nie chciałeś. A PK to osobna sprawa. Zauważ że PK jest jednocześnie indeksowane więc pobieranie po nim będzie szybsze.

1 użytkowników online, w tym zalogowanych: 0, gości: 1