Úterý, červenec 29, 2008

MySQL → Drizzle

Zakladatel MySQL Michael Widenius uvádí projekt Drizzle (mrholení, mžení). Michal Widenius a Brian Aker začali pracovat na odlehčeném databázovém serveru vycházejícím z MySQL s názvem Drizzle. Drizzle by mělo být více navázáno na komunitu, mělo by být menší, štíhlejší a snad i rychlejší. Drizzle nebude obsahovat uložené procedury, pohledy, triggery, granty a další. Bude mít i menší počet datových typů. Díky tomu, že Drizzle bude čistě komunitním produktem, tak čekání na záplaty by nemělo u této verze trvat roky. Drizzle má licenční model GPL v.2. Součástí Drizzle bude i nejnovější InnoDB, které bude jinak až v MySQL verze 6 (Falcon). Podle mne je největší změnou to, že Drizzle má být založeno na mikrojádru. V tuto chvílí je Drizzle portováno na OSX, Linux (Fedora) a Solaris Express. MS Windows není podporováno. Hlavní myšlenkou je méně kódu a větší modularita.

Nezávazný odhad Briana Akera, kdy bude použitelná verze Drizzle, je někdy koncem roku 2008. Brian Aker se pochvalně vyjádřil o vedení společnosti Sun, která vývoj Drizzle umožňuje a podporuje.

Neděle, červenec 20, 2008

MS SQL 2005 versus MySql 5.1

Připravuji ASP.NET aplikaci, která samozřejmě pro svoji činnost potřebuje SQL motor. Původně jsem vybral MySql, k dnešnímu dni ve verzi 5.1. Důvody, které mě k této databázi vedli jsou tyto:

  • Je dostupná i pro operační systém Linux. ASP.NET je možné provozovat přes Mono project i na Linuxu a proto jsem si nechtěl zavírat dveře pro případnou změnu operačního systému. Navíc, když bude aplikace silně vytížena a budeme muset umístit SQL motor na samostatný server, použitím Linuxu ušetříme peníze. Z mého hlediska je provoz SQL serveru srovnatelně možný jak na MS Windows serveru tak i na Linuxu. Obě možnosti mají své výhody i nevýhody.
  • Databázi MySql poměrně dobře znám.
Při výběru vedoucího programátora jsem se setkal u jednoho z uchazečů s velmi silným názorem použít MS SQL, aktuálně ve verzi 2005. Rozhodl jsem se s tímto SQL serverem seznámit a v dalším textu se pokusím provést povrchní srovnání těchto dvou výborných produktů. Bohužel se mi nepodařilo nainstalovat novou verzi MS SQL serveru 2008. Poslední verze RC0 na dvou počítačích při instalaci hlásila, že vyžaduje nainstalovaný .NET framework ve verzi 3.5. Ten sice nainstalovaný byl, na jednom počítači jsem ho dokonce přeinstaloval, ale MS SQL 2008 se mi přesto pro tuto chybu nepodařilo nainstalovat. Není to samozřejmě finální verze a nelze tedy Microsoftu nic vyčítat. Zkoušel jsem tedy verzi 2005 Express. Co se mi na MS SQL 2005 proti MySql líbilo:
  • Dobře zvládnutá podpora XML. Databázová tabulka zná přímo typ XML do kterého lze XML dokument uložit. Je možné kontrolovat validitu těchto XML dat a také je možné přímo XML indexovat. Díky tomu se lze nad XML daty dobře vyhledávat.
  • Dobrá integrace do operačního systému. Například ve sledování výkonu lze velmi pěkně sledovat zobrazovat velké (opravdu velké) množství informací o provozu MS SQL. Je jejich tolik, že u většiny jsem vůbec netušil co nabízená data vlastně zobrazují.
  • Nezkoušel jsem, ale v manuálu jsem se dočetl, že je možné u MS SQL sledovat mnoho údajů o výkonu a efektivitě tohoto serveru a například správně nastavených indexů.
  • Typ sloupce uniqueidentifier. Pro neznalé jde o 16 bajtový GUID – globally unique identifier, který by měl být jedinečný v celé databázi a možná, že i dokonce na celém širokém světě. Příklad GUID: 936DA01F-9ABD-4d9d-80C7-02AF85C822A8. Na GUID je příjemné to, že ve skutečnosti jde o číslo a ne o řetězec, jak vypadá na první pohled. Práce s čísly je u databází mnohem levnější než s řetězci.Navíc je zde možnost u takového typu sloupce nastavit automatické generování hodnoty. To je jako ekvivalent timestamp, který MS SQL 2005 samozřejmě také umí. Je to velmi užitečné, pokud v databázi potřebujete mít jedinečnou hodnotu přes více tabulek, nebo potřebujete mít dokonce jedinečnou hodnotu přes více databází. Například při pobočkovém zpracování dat.
  • Se vzdálenou databází lze bez problémů komunikovat přes Management Studio šifrovaně. U MySql to není úplně triviální problém.
  • Podle dostupné literatury by nativní konektor měl být u MS SQL zhruba o 10 procent rychlejší, než konektory z třetích stran.
Co se mi naopak na MS SQL 2005 proti MySql nelíbilo:
  • Kolaci lze nastavit pouze na konkrétní jazyk. To je problém u tabulek, kam se do řetězců vkládaných do některých řádků ukládají různé jazyky. Může potom nastat problém s jejich tříděním a vyhledáváním – konkrétně s převody na malá a velká písmena u vyhledávání. Nakonec jsem na základě rady přišel na to jak to u MS SQL vyřešit. Je nutné zapnout jakýkoliv jazyk, zkoušel jsem čínštinu a je nutné nastavit kolaci na Windows Collation a Dictionary Sort. Pak vše funguje dobře. U MySql tento problém neexistuje, protože kolaci je možno nastavit přímo na kódování, například UTF8. Chápu architekty Microsoftu proč to tak mají naprogramované, ale myslím, že by nebyl problém přidat i mezinárodní volby. Spíše to svědčí kam je MS SQL primárně určena.
  • Velkým zklamáním je pro mne MS SQL Server Management Studio Express. Proti programům jako Navicat a SQLyog, které jsou dostupné zdarma pro MySql je to dost bída.
  • Typy sloupců jsou pro mne zmatené. Například řetězce lze ukládat do těchto typů sloupců: nchar, ntext, nvarchar, text, varchar. Některé ještě mají více variant, jako například varchar, který má pouze 8000 znaků nebo varchar(max), kam lze uložit až 2^31-1 bajtů. Určitě to není velký problém, ale svědčí to o jisté zmatenosti. Některé typy jsou Unicode a některé ne. Proč se přímo v definici sloupce nenastavuje zda je Unicode a jakého typu?!
  • MS SQL nezná příkaz INSERT INTO (sloupec1,sloupec2) values (hodnota1,hodnota2),(hodnota3,hodnota4) ...? Tedy pro každý vložený řádek je nutné u MS SQL 2005 použít nový příkaz INSERT. To je zbytečné jak programátorsky, tak to musí mít i negativní dopad na výkon.
  • MS SQL neumí vypnout transakce. Podle mého názoru se transakce příliš přeceňují. Ne že by nebyly zapotřebí, ale jejich skutečná funkčnost je diskutabilní. To je ovšem na samostatný článek. MS SQL transakce použije vždy a to i na jedinou operaci. Nevím přesně jaký to má skutečný smysl a především jaký je dopad na výkon.
Neodvážil jsem se testovat výkonnost obou databází. Nebylo by to sice nic moc složitého, ale mám obavy, že udělat objektivní a nenapadnutelný test není v mých časových možnostech. Je tam příliš proměnných, které nelze přímo ovlivnit. Pro zajímavost aktuální ceny (Microsoft eDlink, MySql z jejich webu):
  • MS SQL 2005 Express (max. 1 GB RAM a 4 GB místa na disku): zdarma.
  • MS SQL 2005 Workgroup: 21 199,- Kč bez DPH.
  • MS SQL 2005 Standard: 49 609,- Kč bez DPH.
  • MS SQL 2005 Enterprise: 376 130,- Kč bez DPH.
  • MySQl Community 5.1 (žádná omezení): zdarma.
  • MySql Enterprise Basic 5.1 (obsahuje základní podporu - dva incidenty): 479,- USD/rok/server.
  • MySql Enterprise Silver – Platinium (navíc MySQL Enterprise Monitor a případně Replication Monitor, neomezený počet incidentů): 1 599 – 3 999 USD/rok/server.

Závěr nechám na laskavém čtenáři.


Doplněno 25.7.2008: Josef Volkman mě upozornil, že MS SQL 2008 vyžaduje .NET framework 3.5 SP1 beta. Doplněno 7.8.2008: Dostal jsem několik emailů, které mi vysvětlovaly rozdíl mezi řetězci jednobytovými a Unicode u typů v MS SQL 2005. Všem děkuji, ale já vím, že typy s písmenem "n" na začátku jsou Unicode. Kritizoval jsem zmatenost u typů v MS SQL. Daleko více se mi líbí způsob kdy lze u typu uvést v jakém kódování má být uloženo, např. utf-8, Latin1 apod. MS SQL uní sice nastavovat kolaci, ale navíc se k tomu musí zvolit typ sloupce.