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