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?
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.
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.
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.
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...
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
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 ;-)
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..
>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 ;-)
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.
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.
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.
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.
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 ;-)
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.