180 likes | 342 Vues
M ýtus. Relačné databázy (spolu s objektovými a OR) sú najvyspelejšou formou databáz. Nie je dôvod uvažovať o ničom lepšom. REDIS - REmote DIctionary Server. key-value store alebo data structure server (string, hash, list, set, sorted set) patrí do skupiny NoSQL DB (not-SQL, noRel)
E N D
Mýtus • Relačné databázy (spolu s objektovými a OR) sú najvyspelejšou formou databáz. Nie je dôvod uvažovať o ničom lepšom.
REDIS - REmote DIctionary Server • key-value store alebo data structure server (string, hash, list, set, sorted set) • patrí do skupiny NoSQL DB (not-SQL, noRel) • dnes je silne vžité SQL – jednoduché pre programátora a analytyka, zložité pre server ACID (atomicity, consistency, isolation, durability)
ACID (v REDISe) • Atomicity - je zabezpečené • Consistency, Isolation - transakcie vo forme blokovania všetkých ostatných volaní (transakcia sa nezastaví ani kvôli chybe) • Durability – všetko v RAM, môže sa robiť záloha na disk ako append-only súbor. Po reštarte sa znovu načíta do RAM.
InénoSQL • Document store • Graph DB • Key-value store (memcached) • Hierarchický key-value store
SQL vsnoSQL SQL noSQL • fixná štruktúra (tabuľky, typy) • časté krátke read/write transakcie alebo dlhé batch jobs hlavne s čitanim cross veľa tabuliek • veľké BLOB dáta • JOIN • spĺňa ACID podmienky • tažko distribuovateľné (dáta sú zviazané už v DB) • univerzálne typy • časté krátke read alebo write transakcie s malými dátami • dáta v databázenie súzviazané • plnenezabezpečuje ACID • relatívneľahkodistribuovateľne
REDIS vsMemcached • redis - je zložitejší ako memcacheddb (viacoperácií aj funkcií) • Keys - (navyše expirácia, hash keys - kľúč je tabuľka, lists - kľúč je zoznam s operáciami insert, append, remove atď) • Sets - kľúč je množina • Sorted Sets - utriedený zoznam • Pub/Sub - publish, subscribe, channel • Transactions – blokujúce (serialized) • pipelining – šetrí sieťový roundtrip
Mýtus • Databázový server musí byť poriadne zložitý a plný zložitých algoritmov aby bol rýchly.
REDIS inside(jednoduchší,ako by sadalo čakať) • REDIS = len 20k riadkov kódu • append only file, všetko je v RAM (a VM) • dva druhy protokolov • jednoduchý textový • veľmi jednoduchý textový => široká podpora klientov (možno viac ako MySQL)
REDIS - Multiuser server • redis obsluhuje mnoho userov (rádovo 10k)Znamená to mnoho threadov? • Ako dokážemenežovať toľko threadov? • Nemusí– redis je single threaded(event library)
Mýtus • Pre obslúženie mnoho úloh a userov potrebujem mnoho threadov.
Event Libraryhttp://redis.io/topics/internals-eventlib • jedna veľká slučka (Event Loop) • rad eventovs prioritou rozdelený podľa zdrojov (napr. IO) • vytváram eventy (napr. počúvam zo siete), hádžem ichdo zoznamu eventov spolu s časmi pre scheduler • Vo volaníeventuneblokujemhlavnévlákno.Akčakám nanejakýzdroj, volanie robím znovuako event v event loop (asynchrónne). • Iny spôsob myslenia, napr. nemám stack trace aniprirekurzívnomvolaní (nevýhoda pre debug)
Mýtus • V dnešných viacjadrových serveroch musí mať proces viac threadov, aby bol efektívny. • Nemusí. Môže mať viac procesov.
Event Library • Vhodné pre “mega multi”-user servere (napr. REDIS) • Je ale použiteľnyajinde?
Mýtus • Rýchly server (web, TCP, file, ...) musí byť špecializovaný software. • Programovať takýto server v javascripte je čistá samovražda (prečo by som to vlastne robil???).
Node.JS (DEMO)
Aky rýchly je redis? http://redis.io/topics/benchmarks SET GET • 100007 requests completed in 0.88 seconds • 50 parallel clients • 3 bytes payload • 58.50% <= 0 milliseconds 99.17% <= 1 milliseconds 99.58% <= 2 milliseconds 99.85% <= 3 milliseconds 99.90% <= 6 milliseconds 100.00% <= 9 milliseconds • 114 293.71 requests per second • 100000 requests completed in 1.23 seconds • 50 parallel clients • 3 bytes payload • 43.12% <= 0 milliseconds 96.82% <= 1 milliseconds 98.62% <= 2 milliseconds 100.00% <= 3 milliseconds • 81234.77 requests per second
Budúcnosťdatabáz? • množstvo dát (GB, TB) • sociálne siete – silné väzby, interaktivita • veľa RAM - ako ju vôbec využiť? • SSD disky – vhodné pre redis
Ďakujem za pozornosť. Diskusia