Redis: a memcached gyilkos

4,088
-1

Published on

A Redisről, illetve röviden a NoSQL buzzról, és a key-value adatbázisokról is szó esett a prezentációmban, melynek írásos változata itt olvasható: http://webakademia.hu/2009/10/redis-a-memcached-gyilkos/

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
4,088
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide
  • Redis: a memcached gyilkos

    1. 1. Redis, a Memcached gyilkos Bártházi András
    2. 2. Az előadó Bártházi András mailto: andras beigli barthazi pont hu twitter: ba78 http://webakademia.hu
    3. 3. Miről lesz szó? NoSQL törekvés Mi az a key-value adatbázis? Redis - a memória alapú adatbázis
    4. 4. NoSQL A “NoSQL” 2009-es buzzword A “cloud” témakör hozta meg az igényt: a relációs adatbázisok segítségével nehézkesen elérhető a kívánt horizontális skálázhatóság Leginkább key-value adattárolás, az SQL komplexitása felesleges lehet
    5. 5. NoSQL Népszerű, ismert, és kevésbé ismert projektek: Google BigTable, Amazon Dynamo Cassandra, Chordless, CouchDB, HBase, Hypertable, Keyspace, MongoDB, Neo4j, Memcache, Riak, Redis, Project Voldemort, Sherpa, SimpleDB, GigaSpaces A legnagyobbak már évek óta használják ezeket - az irány kipróbált és tesztelt
    6. 6. Key-value adattárolás adatbázis[“kulcs”] = “érték”; az egyik legegyszerűbb adatmode), a programozási nyelvekben hash, asszociatív tömb, szótár néven fut nagyon régi a történet, de reneszánszát éli a tudatosabb, céleszközökkel dolgozó, nagy látogatottságot kiszolgáló oldalak igényeként merül fel
    7. 7. Redis
    8. 8. Redis
    9. 9. Redis Alapvetően egy kulcs-érték alapú, az adatokat memóriában tároló adatbázisszerver http://code.google.com/p/redis/ Leginkább a Memcachedhez lehet hasonlítani, de szignifikáns különbségek vannak
    10. 10. Tulajdonságok Hipergyors fejlesztés: pár hónap alatt 1.0-s kiadás Nagyon jó dokumentáció Ke)emes közösség (levlista) Jó nyelvi támogatottság (PHP, Ruby, Python, Java...)
    11. 11. Tulajdonságok nagyon gyors kiszolgálás: másodpercenként 100.000 írás, 80.000 olvasás (hivatalosan, de ennek többszöröse is lehet) atomi, összetett műveletek: listák, halmazok támogatása perzisztens tárolás: adatbázis kiírása lemezre jól hangolhatóan
    12. 12. Egyszerűség nem igényel különösebb konfigurációt, gyorsan kipróbálható, átlátható, telnettel lehet hozzá csatlakozni nincsenek bonyolult parancsok, nagyon könnyen és gyorsan tanulható
    13. 13. Alapműveletek SET kulcs érték, SETNX kulcs érték GET kulcs, MGET kulcs1 kulcs2 kulcs3 EXISTS kulcs INCR kulcs, DECR kulcs INCRBY kulcs szám, DECRBY kulcs szám DEL kulcs
    14. 14. Alapműveletek KEYS minta azon elemek listája, melyek kulcsa mintával kezdődik RANDOMKEY RENAME régikulcs újkulcs DBSIZE EXPIRE kulcs szám
    15. 15. Listaműveletek RPUSH kulcs érték, LPUSH kulcs érték elem beszúrása a “kulcs” lista elejére, végére LLEN kulcs LRANGE kulcs kezdet vég lista egy részének lekérdezése LTRIM kulcs kezdet vég
    16. 16. Listaműveletek LINDEX kulcs index a “kulcs” lista egy elemének lekérdezése LSET kulcs index érték adott indexű elem felülírása LREM kulcs darab érték adott értékű elemek eltávolítása a listából LPOP kulcs, RPOP kulcs
    17. 17. Halmazműveletek SADD kulcs érték, SREM kulcs érték, SPOP kulcs SMEMBERS kulcs SMOVE kulcs1 kulcs2 érték SCARD kulcs elemek száma az adott halmazban SISMEBER kulcs érték
    18. 18. Halmazműveletek SINTER kulcs1 kulcs2 kulcsN, SINTERSTORE célkulcs kulcs1 kulcs2 kulcsN metszet lekérése, i)etve metszet tárolása SUNION kulcs1 kulcs2 kulcsN SUNIONSTORE célkulcs kulcs1 kulcs2 kulcsN összeg lekérése, i)etve összeg tárolása SDIFF kulcs1 kulcs2 kulcsN SDIFFSTROE célkulcs kulcs1 kulcs2 kulcsN különbség lekérése, i)etve különbség letárolása
    19. 19. Rendezés listával és halmazzal is működik SORT kulcs SORT kulcs DESC SORT kulcs LIMIT 0 10 ALPHA DESC SORT kulcs BY weight_* SORT kulcs BY weight_* GET object_* veszi kulcs lista elemeit (pl. azonosítók: 1,2,3), lekéri weight_1, weight_2, weight_3 értékeket és rendezi azokat, majd az így kapott sorrend alapján visszaadja object_3, object_2, object_1 elemeket
    20. 20. Redis 1.1: hamarosan Egész számok bináris tárolása EXPIREAT kulcs unixtime MSET kulcs1 érték1 kulcs2 érték2 kulcs3 érték3... MSETNX kulcs1 érték1 kulcs2 érték2 kulcs3 érték3... LMOVE kulcs1 kulcs2
    21. 21. Redis 1.1: hamarosan ZADD kulcs súly érték ZREM kulcs érték ZCARD kulcs ZRANGE kulcs kezdet vég ZREVRANGE kulcs kezdet vég ZRANGEBYSCORE kulcs súlykezdet súlyvég ZSCORE kulcs érték
    22. 22. Mentés konfig fájlban hangolható: x másodpercenként x írás művelet után pl beá)ítható: alapból percenként, de ha volt 1000 művelet, akkor azután is SAVE, BGSAVE, LASTSAVE műveletek
    23. 23. Replikáció Több adatbázist képes összeszinkronizálni: MASTER-SLAVE mode) Egy slave masterként is tud viselkedni, láncok, gráfok építhetőek fel Az egyik lehetőség több processzoros környezet hatékony kihasználására
    24. 24. Backup a teljes adatbázis perzisztens része egy darab fájl bináris memórialenyomat, másra nem használható leá)ás nélkül backpuolható, mivel az adatbázis mentése atomi művelet (rename művelet)
    25. 25. Egyebek egyszerű, saját szöveges protoko) példakódként egy egyszerű Twitter klón forrása is elérhető, kipróbálható több adatbázist (névteret) is támogat, bár nem igazán kényelmesen, érdemes inkább külön szervereket indítani
    26. 26. Redis 1.2: a jövőben Egyszerű Redis Cluster Hozzáfűzés alapú log Hash adattípus Adatbázis JSON dumpja
    27. 27. Redis 1.x: távoli jövő Különféle optimalizációk SORT algoritmusának javítása LOCK, TRYLOCK és UNLOCK BITMAP / BYTEARRAY típus
    28. 28. Hasonló projektek memcached: nem perzisztens, nem kezeli az összetett értékeket memcacheDB: perzisztens, de minden műveletet egyből diszkre ír
    29. 29. Out of memory Ha az adatbázis nem fér be a memóriába, akkor: ne használjunk Redist... félig cache szerűen használjuk
    30. 30. Twitter klón Felhasználók üzenőfalja, az egyes felhasználók azok üzeneteit láthatják, akiket követnek A key-value adatbázis egészen más gondolkodásmódot igényel, mint a hagyományos relációs mode) Ki ismeri a normál formákat?
    31. 31. Twitter klón Felhasználó létrehozása: INCR global:nextUserId (visszakapunk egy számot) SET uid:1000:username felhasználónév SET uid:1000:password jelszó
    32. 32. Twitter klón De hogyan tudom meg, hogy egy adott felhasználónévhez milyen felhasználó azonosító tartozik? SET username:felhasználónév:uid 1000
    33. 33. Twitter klón A követők adminisztrációjához felhasználónként két halmaz: uid:1000:fo)owers uid:1000:fo)owing 1000-es felhasználó követi 1001-et: SADD uid:1001:fo)owers 1000 SADD uid:1000:fo)owing 1001
    34. 34. Twitter klón 1000-es felhasználó üzenetet ír: INCR global:nextPostId SET global:posts:123456789 szöveg LPUSH uid:1000:posts 123456789 LTRIM uid:1000:posts 0 1000
    35. 35. Használat IWIW alkalmazásaink mögötti adattároláshoz Miner mögötti queue, 1iss bejegyzések tárolása, gyorsítása, oldal cache, stb.
    36. 36. Köszönet Bártházi András mailto: andras beigli barthazi pont hu twitter: ba78 http://webakademia.hu/2009/10/redis-a-memcached- gyilkos/ Programozókat keresünk Miner.hu kereső projektünkhöz

    ×