Vlákno názorů k článku Využití databázových indexů od kavol - jak to tady ctu, napada me takovy hloupoucky...

  • Článek je starý, nové názory již nelze přidávat.
  • 22. 7. 2003 10:28

    kavol (neregistrovaný)

    jak to tady ctu, napada me takovy hloupoucky dotaz - mohl by prosim nekdo udelat strucne porovnani MySQL/Postgres/Firebird a janevimco jeste je ted v soucasnosti "in"?
    nemyslim nic ve stylu "ktera databaze na jakem selectu usetri milisekundu", toho se po webu vali tuny, ale spis nejaka doporuceni pro zacatecnika, co si ma pro sve ucely nainstalovat a nadale se s tim trapit (nezli zkouset kazdy tyden neco noveho) ...
    momentalne si na svem webiku hraju s MySQL, staci mi, ale cervicek pochybnosti vrta - zvolil jsem spravne, nemam prejit jinam driv, nez by se stal prechod prilis slozitym?

  • 22. 7. 2003 11:05

    jezovec (neregistrovaný)

    No, porovnání tu nenapíšu, ale možná by vám pomohla moje zkušenost.

    Já jsem s něčím na způsob databazí začínal u Paradoxu/BDE (to jen pro úplnost), pak jsem několik let programoval s Oracle, Sybase a MSSQL (tedy "velké databáze") a teď už dva roky skoro výhradně v Postgresu. S MySQL mám zkušenost jenom uživatelskou (instaloval jsem některé programy, které MySQL používají). Firebird neznám.

    Z tohoto pohledu doporučuji Postgres. Zejména, pokud se chcete databázovým programováním zabývat do větší hloubky. Na Postgresu si můžete vyzkoušet víceméně všechny prvky 'velkých' databází, velkým plus je také výborná dokumentace která uvádí nejen do vlastní databáze, ale i do databázového programování vůbec.

  • 22. 7. 2003 11:41

    venca trotl (neregistrovaný)

    no pokud potrebujete triggery, ulozene procedury, vlastni agregacni funkce, schemata, referencni integritu (i kdyz mozna to uz i mysql ma) a ja nevim co si este ted vzpomenout a nechcete delat tricet updatu nebo insertu za vterinu.... doporucim jako velky fanda postgresu prekvapive postgres.

    pokud tyto veci nepotrebujete (coz je pripad databazi tak odhaduji o peti mozna deseti tabulkach tabulkach) tak je mozne si vzit na to mysql.

    ale jak uz me tu nekdo vodhalil priznavam ze ja sem fakt vysazenej proti mysql takze muj nazor vubec nemusi bejt objektivni.

  • 22. 7. 2003 12:07

    binary_runner (neregistrovaný)

    PostgreSQL, velice slusna podpora standardu, databaze je skutecne relacni (MySQL neni) a podporuje veci jako referencni integrita, jejichz absence cini z vetsiny projektu presahujicich 3-4 tabulky peklo.

    Ostatne pokud vim, tak starsi verze se stala zakladem minimalne dvou komercnich databazi( PostgreSQL -> Sybase -> MS SQL), takze spatna volba to aasi nebude.

    PostgreSQL ma take nektere unikatni nebo nebovykle rysy, ktere mohou v konkretni situaci usetrit dny prace.

  • 22. 7. 2003 17:15

    Jan Kubik (neregistrovaný)

    nepouzivam ani jednu, ale presto by me zajimalo, co je to za vyhodu/co to prinese uzivateli/vyvojari, kdyz je ta postrgesql _skutecne_ relacni?

  • 22. 7. 2003 17:45

    jezovec (neregistrovaný)

    To, že se uživatel / začínající vývojář (pokud dobře rozumím původnímu dotazu) naučí pracovat s relační databází - tj. s něco pak použije u kterékoliv jiné relační databáze.

    V případě MySQL se naučí pracovat s MySQL.

    Já bych, při vědomí toho že na něco se jistě MySQL výborně hodí, doporučil to prvé, protože to otevírá daleko širší obzory - a nezavírá cestu ani k MySQL, když bude potřeba...

  • 22. 7. 2003 12:45

    Miloslav Ponkrác (neregistrovaný)

    Jakékoli porovnání je Vám k ničemu. Výběr databáze záleží tvrdě na tom, co chcete dělat, a za jakých podmínek to chcete dělat. Najdou se situace, kdy MySQL bude nejlepší, jindy zase Postgres a jindy zase Firebird a jindy ...

    MySQL - jednoduchá, rychlá, škálovatelná, nenáročná, běží i na slabých strojích, optimalizovaná pro web. Na druhé straně je ořezaná o věci, které rychlostně zdržují. Má i transakce a referenční integritu, přestože řada lidí zde bude tvrdit opak.

    Postgres - open source databáze, která má procedury, triggery a jiné serepetičky, co se požaduje po větších databázích.

    Firebird - klon Borlandovské databáze Interbase, v zásadě dobrá a nenáročná databáze

  • 22. 7. 2003 14:13

    dnc (neregistrovaný)

    V zasade souhlasim.
    Asi vsak patrim mezi radu lidi, kteri budou tvrdit,
    ze s ref.integritou je to u MySQL ponekud osemetne.
    Aktualni (stabilni) verze dle http://www.mysql.com/downloads/index.html
    je 4.0. Verze ve ktere ma byt implementovan
    FOREIGN KEY - 5.1. Tedy vzdalenejsi budoucnost.

    Na druhou stranu pokud napr. chcete provozovat free
    web site, pocet poskytovatelu, ktery vam nabidnou
    X MB prostoru na disku + Y mista pro MySQL je pomerne velky. Obavam se ze totez rozhodne neplati
    pro PostgeSQL ci Firebird. Ale rad se necham vyvest
    z omylu ;-)

  • 22. 7. 2003 14:40

    Miloslav Ponkrác (neregistrovaný)

    Stačí Vám toto?:

    "In MySQL Version 3.23.44 or later, InnoDB tables support checking of foreign key constraints."

    Mimochodem, dnes je je aktuální verze 4.0.x. Tedy už dost dlouhá minulost. Naprosto nechápu, kde jste přišel na tu 5.1. Klidně si samozřejmě můžete patřit lidi, kteří "vždycky budou tvrdit" cokoli, byť se to třeba nezakládá na pravdě.

    To je prostě základní problém, většina lidí prostě říká, že MySQL nemá to, či ono, že je špatná, protože, a pokud to srovnáte s realitou, jsou to z takových 95% výmysly lidí, kteří o MySQL nic nevědí. Sorry.

    MySQL má své určení, a je to jak říkáte, hlavně webová databáze a nebo malá databáze pro Vaší aplikaci. Můžete si klidně nahrát sdílenou knihovnu (DLL nebo so) k aplikaci a pracovat s daty. A díky konstrukci databáze MySQL si můžete být jistí, že práce s daty bude velmi komfortní, a přitom nebudete potřebovat hafo megabajtů paměti a nejnovější procesor. I to je třeba výhoda MySQL. Samozřejmě MySQL je také klasika pro web. MySQL je dobrá pro rozsáhlá data s jednoduchou strukturou, a pokud možno s převahou čtení.

    Sám nasazuji MySQL omezeně, ale když jí nasadím, nasadím jí tam, kde se projeví její kladné stránky. A pak si lebedím. A samozřejmě nejsem blázen, a nestavím třeba nad MySQL žádné účetní systémy, apod..

  • 22. 7. 2003 16:05

    dnc (neregistrovaný)

    >In MySQL Version 3.23.44 or later, InnoDB tables
    >support checking of foreign key constraints."
    >...
    >Naprosto nechápu, kde jste přišel na tu 5.1

    Viz
    http://www.mysql.com/doc/en/TODO_MySQL_5.1.html
    1.9.3 New Features Planned For 5.1
    FOREIGN KEY support for all table types.

    Jinak nevim, proc jste nasadil tak konfrontacni
    ton:
    > jsou to z takových 95% výmysly lidí, kteří o
    > MySQL nic nevědí

    Nerikam, ze o MySQL toho vim hodne, ale neco snad
    po dvoulete zkusenosti prece ;-)

    Taky nerikam, ze MySQL je dobry ci spatny SRBD,
    protoze nerad stoucham do vosiho hnizda.
    Snazim se pouze klopotne davam dohromady fakta.
    Jejich zhodnoceni pak ponecham na laskavem ctenari ;-)

  • 22. 7. 2003 18:51

    Miloslav Ponkrác (neregistrovaný)

    S prominutím, ale chápete význam toho, co čtete? Já Vám to zkusím vysvětlit:

    1) MySQL vám umožňuje zvolit si z několika možností uložení data na disk. Říká se tomu typ tabulky:

    a) MyISAM - klasika, každá tabulka je v samostatných souborech, databáze je v samostatném adresáři, bez podpory trasakcí, bez podpory cizích klíčů

    b) InnoDB - přístup moderních relačních databází, tj. máte datové spaces, kde je všechno nějak vnitřně uloženo, je rychlejší, než při použité MyISAM, podporuje transakce se všemi náležitostmi, podporuje cizí klíče a mnohé další, i další věci jsou zde mnohem propracovanější

    c) BerkeleyDB - podobné jako u InnoDB, ale nabízí jen zamykání po stránkách

    d) Některé další typy, nechám na Vaše samostudium.

    Co tím chtěli tedy soudruzi z MySQL říci? Že pokud si vyberete InnoDB, tak máte cizí klíče a spoustu dalšího. Pokud si vyberete MyISAM, tak tím sám sobě říkáte, že chcete oželet transakce a cizí klíče. Je to jen Vaše volba. Tabulky MyISAM jsou tam hlavně z toho důvodu, abyste byl kompatibilní se staršími verzemi databází, jinak řečeno, pokud použijete data uložená před třeba šesti lety, abyste je pomocí MySQL byl schopen přečíst a třeba přeimportovat do InnoDB. A to, že si MySQL vývojáři dají za závazek, že na MyISAM ještě dodělají cizí klíče, to je to, co psali v textu, který citujete. Psali, že ve verzi 5.1 budou cizí klíče pro "VŠECHNY TYPY TABULEK".

    Pro jistotu píšu, že se jednotlivé typy tabulek dají navzájem kombinovat. Můžete mít v jedné databázi tabulka různých typů.

    Čtenáři nechť si udělají závěr sami. Dávám k dispozici pouze fakta.

  • 23. 7. 2003 10:40

    dnc (neregistrovaný)

    Pekne.
    Mate pedagogicky talent ;-)
    Pro uplnost dodavam, ze implicitni typ tabulky
    je MyISAM. Odtud (mozna) ten duvod proc "soudruzi"
    chteji implementovat cizi klice i do 'ostatnich
    typu' tabulek. Ono totiz pri kazdem prikazu
    CREATE TABLE davat napr. jeste TYPE = BDB je
    s prominutim opruz. Navic ne vzdy mate pristup
    primo k SQL kodu (embedded SQL, generated SQL).
    Takze abych byl spravedlivy, opravim svuj puvodni
    vyrok z:

    > Verze ve ktere ma byt implementovan FOREIGN KEY -
    > 5.1

    na:

    Verze ve ktere ma byt plne implementovan
    FOREIGN KEY - 5.1

    Mozna me nachytate na hruskach, ale nevim o tom,
    ze by slo nekde globalne nastavit, aby implicitni
    tabulka nebyla MyISAM ale treba InnoDB.
    Pokud to nejde, je to jako rikat ridici osobniho
    auta - pokud nastartujete auto beznym zpusobem, nebude mozne s autem couvat a navic vam pri pripadne havarii usekne hlavu. Chcete-li jezdit
    bezpecne a mit moznost couvani, otvrte a zase
    zavrete pred startem zadni okenko.

  • 23. 7. 2003 10:43

    dnc (neregistrovaný)

    Pekne.
    Mate pedagogicky talent ;-)
    Pro uplnost dodavam, ze implicitni typ tabulky
    je MyISAM. Odtud (mozna) ten duvod proc "soudruzi"
    chteji implementovat cizi klice i do 'ostatnich
    typu' tabulek. Ono totiz pri kazdem prikazu
    CREATE TABLE davat napr. jeste TYPE = BDB je
    s prominutim opruz. Navic ne vzdy mate pristup
    primo k SQL kodu (embedded SQL, generated SQL).
    Takze abych byl spravedlivy, opravim svuj puvodni
    vyrok z:

    > Verze ve ktere ma byt implementovan FOREIGN KEY -
    > 5.1

    na:

    Verze ve ktere ma byt plne implementovan
    FOREIGN KEY - 5.1

    Mozna me nachytate na hruskach, ale nevim o tom,
    ze by slo nekde globalne nastavit, aby implicitni
    tabulka nebyla MyISAM ale treba InnoDB.
    Pokud to nejde, je to jako rikat ridici osobniho
    auta - pokud nastartujete auto beznym zpusobem, nebude mozne s autem couvat a navic vam pri pripadne havarii usekne hlavu. Chcete-li jezdit
    bezpecne a mit moznost couvani, otvrte a zase
    zavrete pred startem zadni okenko.

  • 23. 7. 2003 12:03

    Miloslav Ponkrác (neregistrovaný)

    Nenachytám Vás na hruškách, máte pravdu. Ono je to tak, že vlastně MySQL se teď dost přebudovává.

    Ve verzi 4.x je InnoDb bráno jako směr, který chce MySQL preferovat. Ve verzi 4.1 MySQL rozšiřuje nativní rozhraní pro klientské aplikace, aby bylo vůbec možné pojmout nové features plánované pro další verze. Navíc MyISAM nemá ve svých datových strukturách místo, aby třeba informaci o cizím klíči byť třeba jen uložilo, natož používalo. Proto bude přidání klíčů do MyISAM nutně předcházet rozšíření jejich datových struktur.

    MyISAM se implicitně preferuje proto, že se zaručuje přenositelnost souborů s tabulkami MyISAM. To jest, můžete klidně zkopírovat databázové soubory třeba pod Linuxem a okamžitě jen bez nějakých exportů/importů používat třeba pod Novellem, nebo Windows, či jinde. Navíc MyISAM nepotřebuje žádné nastavení, stačí mu jen ukázat adresář, kde tvořit soubory.

    Je jasné, že chcete-li vytvořit InnoDb tabulku musíte to uvést v "CREATE TABLE". A nebo převést existující tabulku na jiný typ pomocí "ALTER TABLE nazev_tabulky TYPE=InnoDB". To znamená, že i když nemáte přístup k embedded kódu, lze změnit typ tabulky dodatečně. Nevím o tom, že by se dalo nějak defaultně nastavit, jaký typ tabulky má tvořit.

  • 23. 7. 2003 12:39

    Jakub Vrána (neregistrovaný)

    Defaultní typ tabulky lze nastavit při spouštění serveru pomocí mysqld --default-table-type=type. Stejná volba se dá vložit i do my.cnf.

  • 22. 7. 2003 14:17

    dnc (neregistrovaný)

    V zasade souhlasim.
    Asi vsak patrim mezi radu lidi, kteri budou tvrdit,
    ze s ref.integritou je to u MySQL ponekud osemetne.
    Aktualni (stabilni) verze dle http://www.mysql.com/downloads/index.html
    je 4.0. Verze ve ktere ma byt implementovan
    FOREIGN KEY - 5.1. Tedy vzdalenejsi budoucnost.

    Na druhou stranu pokud napr. chcete provozovat free
    web site, pocet poskytovatelu, ktery vam nabidnou
    X MB prostoru na disku + Y mista pro MySQL je pomerne velky. Obavam se ze totez rozhodne neplati
    pro PostgeSQL ci Firebird. Ale rad se necham vyvest
    z omylu ;-)

  • 22. 7. 2003 12:59

    Michal Kubeček (neregistrovaný)

    PostgreSQL i Firebird jsou velmi vyspělé databáze. PostgreSQL má v některých směrech více funkcí, pro Firebird mluví možnost používat nástroje a komponenty, které jsou k dispozici pro InterBase (ocení zejména vývojáři v C++ Builder/Delphi/Kylix). Také mám pocit, že díky MGA Firebird lépe zvládá větší množství konkurenčních transakcí. Ale není to podloženo solidními testy, může to být i rozdílnou mírou zkušeností.

    MySQL se od těch dvou hodně liší. Primárně je to databáze konstruovaná pro situace, kdy data moc nemodifikujete (a spíš insert než update) a potřebujete hlavně rychlé selecty. Takže podpora některých základních věcí (transakce, foreign keys) je dodělávána dodatečně (a není úplná), jiné chybějí zcela (stored procedures, triggers, ...). Výsledkem je, že uživatel MySQL je nucen prakticky vše řešit na straně klienta a získá tak určité špatné návyky. Přesto má MySQL své uplatnění a pro určité typy aplikací se docela dobře hodí.

    Pokud se chcete něco s databázemi skutečně naučit, rozhodně bych doporučil spíš Firebird nebo PostgreSQL. Když pak budete potřebovat použít Sybase nebo MS SQL (nebo třeba i DB/2 či Oracle), budete rozhodně víc "doma".

    Jinak ale musím poznamenat, že přechod z MySQL na Firebird není zdaleka takový problém jako přechod opačným směrem.

  • 22. 7. 2003 14:40

    Michal Kara (neregistrovaný)

    Na druhou stranu takova replikace databaze (distribuce jedne DB na vic stroju) se hodi. Pri povodnich nam docela pomohla :-) (Ma ji treba Postgres?)

  • 22. 7. 2003 14:56

    Michal Kubeček (neregistrovaný)

    Nevím jak PostgreSQL, ale pro Firebird lze použít IBReplicator. Je to komerční produkt - viz http://www.ibphoenix.com/main.nfs?a=ibphoenix&s=1058877771:11441&page=ibp_replicator
    Praktické zkušenosti s ním ale nemám.

  • 22. 7. 2003 16:43

    Ivan (neregistrovaný)

    K postgresu existuje projekt, ktery pridava
    High Availability. Soucasti normalni distrubuce to neni. Udelat neco takoveho nad databazi, ktera ma transakce trigery a ulozene procedury je neco jineho
    nez udelat to nad mysql.

  • 22. 7. 2003 19:08

    Miloslav Ponkrác (neregistrovaný)

    Otázkou je, zda to nad transakční databází není stejně jednoduché. Třeba taková Sybase čte transakční log a transakce replikuje dál.