Apache+Postgres a spousta requestu
Tomáš Vondra
vondra na tesmail.cz
Pondělí Prosinec 9 20:41:26 CET 2002
Ahoj,
neznám samozřejme danou aplikaci, kdo ji programoval apod. takže
následující poznámky berte s rezervou:
Rychlost "databáze" zavisí zejména na následujících věcech:
a) kvalita návrhu struktury databáze
Dobře udělaná struktura je klíčová, nicméně není úplně jasné z
jakého pohledu posuzovat "kvalitu" návrhu. Existují v zásadě
dvě hlavní definice, mezi jejichž zastánci pravidelně dochází k
nemilosrdným svatým válkám:
definice 1: dobrá je databáze, která je rychlá
definice 2: dobrá je databáze, kterou lze jednoduše rozšiřovat
Přitom ale ideální průnik mezi těmito definicemi existuje pouze
v mizivém procentu případů. Udělat databázi, která bude rychlá a
přitom ji bude možné v budoucnu rozšiřovat, to je skutečné
umění.
Tuto otázku samozřejmě nemůžeme posoudit, pokud nezmáme
strukturu databáze, a požadavky na ni kladené.
b) modelování vztahů mezi entitami
Do struktury databáze prakticky nikdy nedostanete 100% vztahů
mezi entitami (ať již přes vazební tabulky, integritní omezení,
atd.), ale snahou by mělo být dostat jich tam co nejvíc.
Pokud je to přímo v databázi (primární a cizí klíče, triggery,
indexy, atd.) je to vždy podstatně rychlejší než při umístění do
aplikace (klientské části, v tomto případě PHP skript).
Těch 20 SQL dotazů na stránku se mi zdá poměrně hodně, ale není
to krize. Ostatně počet sám o sobě nic moc neříká. Ty příkazy
mohou být primitivní, nebo taky pěkně složité, mohou pracovat s
malou tabulkou, nebo také s tabulkou v řádu několika GB. Neříká
to jaké joiny jsou použity, atd.
Zkuste se tam podívat, a pokud jsou v těch SQL příkazech
například věci, které by šly řešit přímo na databázi (typicky
kontrola jedinečnosti hodnoty, určitých závislostí, apod.) tak
ať to opraví ten kdo tu aplikaci psal.
c) kvalita PHP aplikace
Celkem velkou roli hraje také způsob připojování k databázi -
jestli se na celé stránce používá jedno spojení, nebo jestli se
jich spouští několik.
To je totiž celkem důležitá věc, na kterou se často zapomíná,
prtože každé nové spojení je nutno inicializovat (a to stojí čas
a paměť). V PHP jsou persistentní spojení přímo zakomponována,
ale otázka je zda je aplikace využívá, resp. zda je nějak
simuluje (předává si spojení dál a dál).
d) pozadavky na integritu dat
Na MySQL v tomto případě zapomeňte, to ať vás ani nenapadne. V
této aplikaci totiž silně záleží na integritě dat, a o to v
MySQL (3.2x) přicházíte. Transakce, triggery a klíče jsou vaši
kamarádi. To MySQL nemá, a přecházet na ni by byla sebevražda.
Nemyslím že by to vyřešil přechod na jinou databázi (Oracle,
Interbase, atd.) Spíše bych investoval do hardware, to se mi
jeví účelnější. Jinak vás nevyhnutelně čeká úprava aplikace,
přičemž výsledek dle mého názoru není zaručen.
fuj, to jsem se zase rozepsal
Tomáš
PS: U nás na fakultě (FJFI - ČVUT) používáme systém společný pro
celé ČVUT, běží to tuším nad Oracle. Dosud jsme používali
čistě terminálovou aplikaci, nyní to běží i na PHP a žádné
problémy jsem nezaznamenal.
Další informace o konferenci Linux