Witam, o co chodzi: buduję stronę opartą o $_GET, pobieram do zmiennej numer artykułu z parametru w adresie i chciałbym na podstawie tegoż numeru pobierać z tablicy dodatkowe informacje o artykule (z jakiego działu pochodzi, jaki ma tytuł, jaki jest jego czas ekspozycji itp). Moje pytanie brzmi następująco: Czy jeżeli artykułów nazbiera się 10000, a userów na stronie nie będzie brakować to czy serwer nie będzie się pocił przy przetwarzaniu tak niemałej tablicy? czy może istnieje inne rozwiązanie (np. include z plików tekstowych - wtedy serwer nie zaśmieca sobie pamięci całą tablicą). Proszę o sugestie.
Aleś mi odpowiedział, mam ograniczoną bazę danych na serwerze, poza tym pojęcie o odczycie z mysql przez php też mam niewielkie, musiałbym się podszkolić, chwilowo pozostaje mi zrobić to bez bazy, być może zrobię migrację do mysql w swoim czasie. Pytanie pozostaje bez odpowiedzi.
Serwer MySQl jest dość szybkim serwerem bazodanowym, niemniej jednak przy dużej ilości połączeń musi dzielić czas pomiędzy użytkowników. Dokładne dane co do szybkości i przeprowadzonych testów znajdziesz pewnie w necie
Jeżeli zapytanie do bazy danych jest poprawnie napisane i zoptymalizowane to przy 10000 rekordów bazy czas odczytu rzędu milisekund (dla pojedynczego zapytania - a więc i użytkownika ) Tak więc spokojnie możesz trzymać dane o artykułach w bazie danych, musisz jedynie na bieżąco kontrolować i sprawdzać szybkość wykonania zapytań do serwera bazodanowego.
klucz do sukcesu, to nie szybkość serwera i przepustowość łącza a poprawnie napisane i zoptymalizowane zapytanie.
To już do wyboru.
Silnik bazodanowy - kwestia zapoznania się - tak jak wspomniał kalamita, najpopularniejszą
obecnie jest MySQL, chociaż też Postgresql jest niemniej ciekawą alternatywą.
Są to tzw. bazy relacyjno-obiektowe, gdzie głównie powinieneś zwrócić
uwagę na obsługę tzw. transakcji,
czyli wysyłasz zapytanie modyfikujące (UPDATE,INSERT, DELETE)
i jeżeli coś nie zadziała, masz możliwość cofnięcia zmian.
Wygląda to w ten sposób, w formie pseudocodu.
//$db nasze połączenie do bazy)
try{
//rozpoczęcie transakcji
$db->BeginTrans();
$db->Execute("INSERT INTO articles articleId, articleSubId VALUES ?,?", array(1,80) );
//zatwierdzenie zmian
$db->CommitTrans();
}
//tutaj przechwyciliśmy wyjątek dla bazy danych
catch(DBException $db){
$db->RollBackTrans();
}
W MySQL ENGINE=InnoDB obsługuje transakcje,
w Postgresql jest zintegrowane,
ale też niektóre firmy oferują hosting tzw baz obiektowych typu MongoDB.
Też zależy do czego przygotowujesz portal.
W przypadku baz relacyjnych również korzystaj z tzw. Prepared Statements,
czyli kompilowaniu zapytań na język zrozumiały dla bazy danych przed ich wysłaniem,
- daje to możliwość zabezpieczenia się przed niektórymi atakami SQL Injection
oraz poprawia wydajność w komunikacji z bazą danych.
Karol
p.s. Jeżeli korzystasz z php5, zacznij wykorzystywać klasy PDO do komunikacji z bazami danych.
Również warto przy okazji poczytać o projektowaniu i optymalizacji baz danych
- zakładanie indeksów na określone kolumny, dobieraniu odpowiednich typów do przechowywania
danych, optymalizacji dla 64bitowych - trochę tego jest.
Zawsze możesz z kimś się dogadać i wykupić lepszy hosting, np.: dedykowany,
gdzie sam zadecydujesz, jakie silniki bazodanowe mają być obsługiwane,
jakie programy dostępne, zależy ile możesz wydać na hosting.