Hosszútávú párkapcsolatban a MongoDB-vel

Rátky Gábor
CTO, Secret Sauce Partners

Secret Sauce Partners

Secret Sauce Partners

  • 2010-ben kezdtük 4 fős fejlesztőcsapattal
  • 2011 óta nagy forgalmú ruhaboltokkal dolgozunk
  • Az emberek múltbéli vásárlásai alapján ajánlunk nekik méretet
  • JavaScript integrációnk révén az oldalak teljes forgalmát megkapjuk

Termékek

Vásárlások

Vásárlók

A legfontosabb adathalmazok:

Fit Predictor

Mit használjunk?

  • Legyen gyors, mert (általunk) soha nem látott forgalmat kell kiszolgálnia
  • Legyen rugalmas, mert nem tudjuk pontosan milyen adatot fogunk kapni és eltárolni
  • Lehessen a teljes adathalmazon számításokat elvégezni anélkül, hogy mindent be kéne tölteni a memóriába
  • Legyen fejlesztőbarát és legyen könnyű dolgozni vele

Mit használjunk?

Legyen gyors

  • "MongoDB is web scale"
  • Az adatmodell és bizonyos képességek (hiánya) miatt gyorsabb és jobban skálázható
  • Tároljuk az összetartozó adatokat egy helyen:
    • Vásárló: Időben különböző vásárlásokkal és visszaküldésekkel
    • Termék: Összes szín-méret kombinációjával együtt
  • Secondary nodeok az olvasások skálázására (master-slave replikáció)
  • Shardok (partícionálás) az írások skálázására
  • Finomhangolható konzisztencia, olvasási, írási preferenciák

Legyen rugalmas

  • Dokumentum-alapú adatmodell
  • Könnyen változtatható séma
  • Rugalmas adatmigrációk
  • Semmi sincs kikényszerítve, az alkalmazás szabad kezet kap
     
  • Tehát: az alkalmazás felelőssége rendet tartani:

Legyen "kiszámítható"

  • A számítások bármilyen nagy adathalmazon elvégezhetőek
  • Teljes adathalmaz mérete nem limitált egy gépre
  • A számításhoz szükséges adatok legyenek egy helyen tárolva
  • A munka minél nagyobb részét az adatbázis végezze el, ne az alkalmazás
  • 2011-ben ezt úgy hívták hogy MapReduce
  • MongoDB-ben mapReduce command
    • JavaScript függvények (és JSON dokumentumok)
    • A végeredmény is JSON dokumentumok
    • Akár teljes újraszámítás, akár inkrementális az algoritmus

Legyen fejlesztőbarát

  • $ mongo
    > db.forums.insert({ name: "Budapest NOSQL" })
  • JavaScript, JSON
  • Jól dokumentált, hatalmas community
  • Egyszerű, kiszámítható működés
  • Ismerős koncepciók:
    • Collections (tables)
    • CRUD (insert, find, update, remove)
    • Secondary indexes (unique, compound, sparse)
  • ORM helyett ODM-ek
    • Node.js: Mongoose
    • Ruby: Mongoid

2011

MongoDB

Node.js

Ruby

A jó

  • Fejlesztőbarát
    • Egyszerű adatmodell (impedance mismatch)
    • Interaktív lekérdezések (JavaScript)
    • Rugalmas séma, heterogén dokumentumok
    • Üzemeltetés
  • Gyors
    • API primaryre ír, olvas
    • Számítások a secondaryről olvasnak
    • Shardolás révén több primary (replicaset)
    • Mihez képest?
       
  • Példa: Vásárlók és a cookie-jaik (indexed array)

A rossz

  • Egyszerű adatmodell
    • Nincs séma validáció
    • Adatintegritás nincs kikényszerítve
    • Adatmodellezés kulcsfontosságú
  • Rugalmas séma
    • Adatmigrációk elkerülhetetlenek, cserébe nincs visszajelzés
    • Adatot denormalizálni nem kell félnetek jó lesz én nem ellenzem
  • Sharding bonyolult

A csúf

  • MongoDB MapReduce
    • JavaScript engine, single thread, single core
    • Folyamatos BSON/JSON (de-)szerializáció
    • Írások leterhelik a primary-t
    • Olvasások felborítják a working setet
    • Single collection bemenet, kötött kimeneti formátum
  • Viszont aggregation framework jó alapvető analítikai kérdésekre, aggregációkra (ld. Amadeus)

2011

MongoDB

Node.js

Ruby

2016

MongoDB

Node.js

Ruby

PostgreSQL

Spark

Redshift

EMR

Párkapcsolati tanácsadás

  • Nyugodtan ismerkedjetek, ismerjétek meg a NOSQL adatbázisok erősségeit, gyengéit (pl. BPNOSQL)
  • Primary operational store-t (OLTP rendszert) választani olyan mint valakinek megkérni a kezét vagy igent mondani majd másnap összeházasodni
  • Az alkalmazás pedig a gyerek aki azonnal megszületik és együtt kell felnevelni
  • Egy hosszú, jól működő házasságban el lehet a barátokkal utazni (Amadeus) vagy el lehet menni a barátnőkkel vásárolni (SSP), mert nem vagytok összenőve és nem kell mindent együtt csinálni
  • A problémákat nem lehet a szőnyeg alá söpörni, de feleslegesen se kreáljatok magatoknak, mint mi :)

Kötelező pie chart

Köszönöm!

Kérdések?

@rgabo

gabor@secretsaucepartners.com

Hosszútávú párkapcsolatban a MongoDB-vel

By Secret Sauce Partners, Inc.

Hosszútávú párkapcsolatban a MongoDB-vel

  • 1,419