O'Reilly MySQL Conference z mého pohledu

Školení, která pořádám

Minulý týden jsem se zúčastnil čtyřdenní konference o MySQL v Kalifornii, kam jsem byl pozván jako přednášející. Konference byla poměrně velká, přednášky probíhaly až v osmi sálech najednou, přednášejících bylo celkem kolem stovky a účastníků odhadem kolem tisíce. Vedle konference probíhala i výstava, kde mělo několik firem svůj stánek.

Následující poznámky jsem si udělal z přednášek, které jsem si z bohatého programu vybral a osobně je navštívil.

Diagnosing and Fixing MySQL Performance Problems

Justin Swanhart se v tomto tutoriálu snažil hlavně předat myšlenku, že bychom se neměli spoléhat na vlastní intuici a zkušenosti z minula, ale že bychom měli svá rozhodnutí při výkonnostních problémech zakládat především na měřeních. K tomuto účelu představil několik nástrojů, z nichž některé pro mě byly dost nízkoúrovňové (iostat, vmstat). Nejzajímavější částí byly tři případové studie, při kterých Justin popsal symptomy problému, provedená měření a přijatá opatření.

State of the Dolphin

Tomas Ulin, vice-president Oraclu pro MySQL, představil především změny chystané pro MySQL 5.6, které jsou k vyzkoušení na labs.mysql.com. Podání keynote mě nijak nenadchlo, nejzajímavější byl nadšený vstup Duleepa „Dupse“ Wijayawardhana o adopci novinek v MySQL.

Druhá keynote o PostgreSQL šla mimo mě.

Where does MySQL Fit In (at Craigslist)?

Jeremy Zawodny je v oblasti MySQL pojem, ale jeho přednáška mi příliš zajímavá nepřišla. V poměrně dlouhém úvodu připomenul, jak vypadal svět ukládání dat před deseti lety (dominace Oracle) a jak vypadá teď (MySQL spolu s mnoha dalšími technologiemi). Dále popsal, že v Craigslistu dříve na všechno používali MySQL a teď pro některé úlohy začínají využívat Sphinx, Redis a přemýšlí o dalších technologiích.

The Secret Sauce of Sharding

Přednášky vývojářů Facebooku se mi líbily už na OSI Days a přednáška Ryana Thiessene o rozdělování dat do více databází se stejnou strukturou ve více instancích MySQL na každém z mnoha serverů patřila opět k tomu nejzajímavějšímu. Ryan popsal, jak na základě ID objektu získají místo, kde je tento objekt uložen (z haše ID získají virtuální místo, podle něj se dotáží na seznam fyzických míst, kam se virtuální místo replikuje, a z tohoto seznamu si vyberou to nejbližší). Pak popsal, že objekty ukládají pohromadě podle jejich logických vazeb. Také vysvětlil, jak získávají místa pro vytváření nových objektů (mají seznam míst, ve kterých mohou nové objekty vznikat a tato místa ví, jaká ID na ně můžou být přiřazena). Pokračoval vysvětlením procesu, když server přestane stíhat (jednu z databází nebo instancí přesunou na jiný server).

A New Approach For Dealing with Complex Database Schemas

Ori Herrnstadt z Akibanu začal popisem různých způsobů denormalizace dat a problémů s tím spojených (především duplikace dat). Dále představil velmi zajímavou myšlenku, jak organizovat ukládaná data a tím se denormalizaci vyhnout. Místo organizace podle tabulek se data organizují podle primárního záznamu, ke kterému se vztahují. Dobře pochopitelné to je z druhého obrázku v souvisejícím článku. Důsledkem této organizace je, že když k primárnímu záznamu chceme získat související informace, tak to je prakticky zadarmo.

Způsob implementace je také zajímavý. Akiban Server se napojí na MySQL replikaci, takže data získává z tohoto zdroje (to by se mi líbilo u Sphinxu). Serveru se následně dotazujeme pomocí Memcache protokolu.

Percona Server: secret features

Vadim Tkachenko popsal především specifické konfigurační direktivy, stavové proměnné a přehledové tabulky Percona Serveru. Přednáška byla tak suchá, že bych si informace raději nastudoval v dokumentaci.

Detecting Data Drift In a Live System

Mikey Dickerson popsal, jak v Google detekují rozsynchronizování master a slave serverů. Využívají k tomu dvě vlastní agregační funkce last_value (vrátí naposledy vloženou hodnotu) a ordered_checksum (kontrolní součet dat podle pořadí jejich vložení). Tyto dvě funkce postupně spouští pro jednotlivé bloky dat v jednotlivých tabulkách na všech serverech. Při rozdílných výsledcích hledají příčinu (nejčastěji chyba HW, ale třeba taky různá práce s desetinnými čísly na různých platformách, chyba v aplikaci omylem zapisující na slave, nebo bug MySQL).

Building Your First Web Application with MongoDB

Roger Bodamer nejprve shrnul principy bezschémových databází, které už jsem znal např. z přednášky o CouchDB na WebExpu. Pak popsal, jak MongoDB replikuje data a jak se zotavuje z rozbití masteru a jak je dokáže rozdělovat na více replica-setů. Nedokázal přesvědčivě odpovědět na otázku, jak MongoDB řeší kontrolu unikátnosti sekundárních indexů.

Sphinx Search: 2.0

Rich Kelm v rychlosti shrnul nové vlastnosti chystaného Sphinx 2.0: stabilnější real-time indexy, lepší Sphinx QL, slovník používající slova místo čísel, hledání ve stejné větě a odstavci, lepší paralelní vyhledávání. Rich ale bohužel není vývojář, takže prakticky na žádný z následujících asi 20 dotazů nedokázal odpovědět.

State of MariaDB

Po strhující přednášce „Montyho“ o současných a budoucích vlastnostech MariaDB jsem nabyl dojmu, že dlouhodobě nedává příliš velký smysl zůstávat u MySQL a lepší bude přejít na MariaDB, což je forch MySQL. Prakticky všichni významní vývojáři MySQL přešli do Monty Programu, kde pracují na mnoha vylepšeních (např. zásadní optimalizace poddotazů) a přitom zachovávají kompatibilitu s MySQL včetně nejnovějších verzích.

Data in the Cloud

Přednáška Mårtena Mickose byla zajímavá především tím, že jako dřívejší CEO MySQL poskytl zákulisní informace týkající se zájmu Oracle o koupi MySQL. První nabídka přišla prý už v roce 2005, další při kupování MySQL Sunem (Oracle: „dáme víc“). Nakonec musel Oracle koupit celý Sun…

State of Drizzle

Brian Aker povídal o Drizzle, což je další fork MySQL. Z popisovaných vlastností mě nejvíc zaujalo sjednocení transakčního logu InnoDB a binárního logu, který se nejčastěji používá pro replikaci.

MySQL State of the Art at Facebook

Harrison Fisk a Domas Mituzas připomněli způsob využití MySQL ve Facebooku a nástroje, které používají k jeho monitorování. Příliš nových informací jsem nezachytil, snad s výjimkou statistik, že MySQL servery Facebooku ve špičce vyřídí 3 milióny dotazů za sekundu s průměrnou dobou odezvy 5 ms.

The Aspersa System Administrator's Toolkit

Baron Schwartz z Percony představil několik nástrojů příkazové řádky pro monitorování stavu serveru, např. vylepšený iostat nebo výpis informací o hardware. Nejzajímavější byl asi nástroj, který sleduje základní diagnostiky a pokud narazí na něco neobvyklého, tak začne logovat data, která lze následně zkoumat (stalk/sift). Nástroje se nechystám využívat.

MySQL at GitHub

Pragmatická přednáška Coreye Donohoa se mi líbila především proto, že popisovala o něco běžnější řešení než většina ostatních společností na konferenci. Na GitHubu používají běžné MySQL 5.0.51a přímo z distribuce a dokonce nepoužívají ani MySQL replikaci. Místo toho používají DR:BD, což by měla být replikace přímo na úrovní diskových operací. Kromě MySQL používají také Memcache a každý ze serverů je schopen převzít funkci kteréhokoliv jiného. Svou největší tabulku všech operací uživatelů (kolem 150 GB) převedli na „bezschémové MySQL“ popsané FriendFeedem, což jim umožňuje snadno měnit schéma a přidávat pomocné struktury pro rychlé hledání.

Gizzard: A Pragmatic Distributed Storage Framework

Přednáška Matta Freelse z Twitteru byla nejen pro mě velkým zklamáním. Dozvěděl jsem se prakticky pouze to, že v Twitteru používají jakýsi Gizzard, zbytek byl i kvůli nervozitě přednášejícího nepochopitelný.

Replace phpMyAdmin with Something Better

Se svou přednáškou jsem nijak zvlášť spokojen nebyl. Přišlo na ni 15–20 lidí, ale víc jsem po pravdě řečeno ani moc nečekal. Účastníci konference v naprosté většině případů totiž řešili zcela jiné problémy, než jak si pohodlně vytvořit databázi a ručně v ní spravovat data, natož ve webovém prohlížeči (drtivá většina účastníků má vlastní servery, takže nějaký zakázaný vzdálený přístup nemusí řešit). Navíc středa odpoledne byla slabší celkově, podobný počet účastníků jsem viděl i na podle mě vynikající přednášce o GitHubu (která by třeba na WebExpu byla myslím nacpaná k prasknutí).

Za slabinu své přednášky bych označil především to, že jsem zbytečně moc času strávil ukazováním nedostatků phpMyAdminu, které většina účastníků důvěrně znala. Místo toho jsem měl víc času věnovat cool vlastnostem Admineru. Kvůli tomu přednáška podle mě nepůsobila moc přesvědčivě. Ale za katastrofu to nepovažuji, většina účastníků přednášky si Adminer podle mě přinejmenším vyzkouší.

Get Relational Data Effectively with NotORM for PHP

Na mou BoF přednášku nikdo nedorazil. Jednak byla původně plánovaná na 19:00, pak v papírovém programu přesunutá na 20:30 (kdy zároveň začínala recepce) a jednak na konferenci bylo naprosté minimum vývojářů. PHP vývojáře jsem za celou dobu potkal dva.

Summary Tables, Aggregate Tables and Materialized Views Using Flexviews

Přednáška Justina Swanharta patřila k jedné z posledních přednášek na konferenci a zároveň k tomu nejzajímavějšímu, co jsem na ní viděl. Justin nejprve vysvětlil smysl materializovaných pohledů, pak připomenul jejich absenci v MySQL a naznačil možnost jejich emulace pomocí triggerů. Zároveň ale vysvětlil, že cena tohoto řešení může být nepřijatelná, protože zdržuje každý commit. Popsal proto řešení Flexviews, které je založeno na asynchronním sledování binárního logu, z kterého se aktualizují pomocné tabulky, ze kterých se následně počítají data pro materializované pohledy. Možnosti jsou poměrně rozsáhlé – kromě agregačních funkcí, seskupování a třídění výsledků lze dokonce i spojovat tabulky. Řešení používá PHP a uložené procedury MySQL. Přednáška se mi líbila i proto, že jsem o implementaci emulace materializovaných pohledů v MySQL (pomocí triggerů) kdysi sám uvažoval.

Big and Small Data at @Twitter

Uzavírací přednáška Jeremy Colea byla mnohem lepší než první přednáška o Twitteru, ale pro mě moc zajímavá nebyla. Šlo v podstatě o souhrn technologií, které v Twitteru používají – MySQL, Grizzle, Hadoop, Cassandra, …

Závěr

Z konference si odvážím dva hlavní poznatky. První je, že svět ukládání dat začíná být značně roztříštěný – nejen, že se pro řadu úloh často používají bezschémové databáze (na konferenci se největší pozornosti dostalo MongoDB), ale i samotné MySQL se rozpadlo do mnoha různých verzí: MariaDB, Drizzle, Percona Server, Facebook a Google také mají svou veřejně dostupnou verzi a pak samozřejmě původní MySQL, kterému se ale už spíš říká „MySQL od Oracle“.

Druhý poznatek souvisí s cílovou skupinou konference, kterou nebyli vývojáři, ale spíše správci databází. Přijde mi, že se spousta energie a intelektu věnuje na řešení ryze technických problémů typu „jak uložit data, abychom na to spotřebovali co nejmíň serverů a ušetřili co nejvíc za provoz“. To je samozřejmě taky důležité, může to vyžadovat tvůrčí přístup a může to být i zajímavé, ale sám bych se tím zabývat spíš nechtěl. Dobře to shrnul Jeremy na uzavírací přednášce: „Soustředíme se na stabilitu a efektivnost a ne na přidávání nových funkcí.“ Jako uživatel Twitteru to samozřejmě vítám (lepší rychlá služba, která nepadá, než nedostupná nebo pomalá služba se zajímavými funkcemi), ale je mi z toho trochu smutno a budu rád, až se přesuneme do stavu, kdy se bude možné zase soustředit na přidávání nových funkcí.

Návštěvy konference rozhodně nelituji, i když část přednášek šla mimo mě. Ostatně to byla až třetí hlavní věc, kterou jsem byl v Americe vyřídit.

Jakub Vrána, Osobní, 18.4.2011, diskuse: 1 (nové: 0)

Diskuse

Martin:

a co ta prace? mimochodem jen se potvrzuje ze svet zije necim jinym nez vetsina lidi tady. tady je lidem zatezko si zaplatit $20 mesicne a mit super hosting se ssh a vzdalenym pristupem do mysql z desktopu. misto toho si koupi hosting za 20 Kc mesicne a pak tydny resi, jak prekonat jeho omezeni. tj chybejici rozsireni, starou verzi php, chybejici podporu skriptu na pozadi atd atd

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.