Alternatív adatbázisok Gráfadatbázisok
Adatbázis típusok Relációs PostgreSQL, Oracle, MySQL, stb. Dokumentum MongoDB, CouchDB, OrientDB Gráfadatbázis Neo4J, OrientDB, ArangoDB, InfiniteGraph Key-value store Redis Egyéb
Relációs adatbázis Adattábla modell: Űrlapok és táblázatok tárolására Fix séma Előnyök: Kiforrott rendszerek (1979), sokan ismerik, sok rendszer támogatja SQL nyelv standard, elterjedt Komplex lekérdezések könnyen készíthetők Homogén, aggregált adatokra van optimalizálva Konzisztencia, tranzakciók
Relációs adatbázis Hátrányok Heterogén, változó sémájú, vagy ritka adatra nem optimális Kapcsolatokat rosszul kezeli JOIN költségei Replikáció általában gyenge Törékeny replikációs megoldások, többnyire master-slave Rosszul skálázódik
Mikor kéne váltani? Sok oszlop, melyeket csak néhány rekordnál használunk Sok N to N kapcsolat Fa jellegű struktúrák Attribútum táblák A séma gyakran változik
Dokumentumadatbázis Dokumentum modell Fa jellegű adat Kapcsolat kevés, vagy egyáltalán nincs Előnyök Beszúrás és visszakérés nagyon gyors Schemaless architektúra: heterogén adatra Jól skálázódik
Dokumentumadatbázis Hátrányok: Konzisztencia, tranzakcionálás MongoDB: nincs ACID Sok művelet egy tranzakcióban: lassú Sok kapcsolattal rendelkező adatra nem optimális
Gráfadatbázis Gráf modell Az adatbázis entitásai egy gráf pontjai és az azok közötti kapcsolatok
Gráfadatbázis
Index-free adjacency Kapcsolat bejárása Relációs adatbázisban Tábla1 -> foreign key -> tábla2 Optimálisan ez 1 db index lekérdezés, O(log(n)) időben Gráfadatbázisban Gráfpont1 -> él -> gráfpont2 Natív gráfadatbázisban fizikai hivatkozás, O(1) időben Gráfok bejárása a teljes adatmennyiségtől független, >100.000 ops
Mit jelent ez? Object mapping Egy Java referencia az adatbázisban egy él bejárása egy JOIN helyett Modellezés táblák helyett kapcsolatokkal Lekérdezhetőség Önkényes attribútumok mentén nehéz lassú Kapcsolatok mentén gyors Adatmodell felépítése A szükséges adatokat el tudjuk érni bejárással Ún. Root vertexek szerepe
Gráfadatbázis Neo4J Legrégebbi, legelterjedtebb gráfadatbázis Első release 2007, 1.0 2010, jelenleg 2.2.0 Community GPLv3, Enterprise fizetős OrientDB Multi-model (Graph, document, object) Első release 2010, jelenleg 2.0.10 Community Apache v2 licence, Enterprise fejlesztésre ingyenes, prod. fizetős ArangoDB Multi-model Apache v2 licence
Tinkerpop stack De facto standard technology stack for Graphdbs Blueprints: JDBC for graphs Pipes: Adatfeldolgozó gyártósor Gremlin: Egységes gráf nyelv (Groovy) Frames: JPA for graphs Furnace: gyakori algoritmusok gyűjteménye Rexster: gráfok REST felett
Blueprints Alap típusok: Vertex és Edge CRUD Lekérdezések fluent API
Frames Object mapper Blueprints fölé Interfész definíció annotációkkal, modulokkal bővíthető JavaHandler GremlinGroovy
Frames
Frames
Frames
Frames
Gremlin Standard lekérdező nyelv gráfokra JVM driver + interaktív konzol Groovy DSL
Pipes Dataflow processing framework Pipe ~= Spring Batch step Tetszőlegesen kombinálhatók Pipeline
Pipe típusok Transform: Kap S típust, kiad E-t TransformPipe<S,E> extends Pipe<S,E> Filter: Kap S típust, vagy visszaadja, vagy nem FilterPipe<S> extends Pipe<S,S> Side Effect: Kap S típust, visszaadja, közben csinál valami mást SideEffectPipe<S,T> extends Pipe<S,S> Branch: Kap S típust, eldönti, merre küldi tovább Metapipe: beágyaz egy vagy több pipe-ot Pipeline Logikai kapuk
Pipes
Pipes
OrientDB Multi-model Object Document Gráf Replikáció: multi-master Sharding: testreszabható Help: külön a dokumentumok, külön a média JVM-re épül: Natív java API Driver: Java (natív + JDBC), Javascript, Python, PHP,.NET,
OrientDB Schema-less MongoDB-szerűen, nincsenek megkötések, minden classnak tetszőleges property-ket vehetünk fel Típusokat on the fly létrehozza Schema-full Típusok és a megkötések előre vannak definiálva Ha az input nem felel meg a sémának, hibát dob Hybrid schema Egyes elemek kötöttek, a többi szabad
OrientDB Hooks ~= RDBMS trigger, az adatbázis módosítása váltja ki Live query
OrientDB SQL-like
OrientDB Elosztott működés dserver.bat/dserver.sh Hazelcast -> broadcast üzenetekkel megtalálják egymást Minden node külön megszólítható (multi-master) Adatok elosztása széleskörűen konfigurálható Pl. help: metaadat és média külön cluster -> külön gépre kirakható Működés: kezelhető hibáknál error helyett megkerüli Portok Típusok Stb.
Irodalom http://www.slideshare.net/lvca/why-relationships-are-cool-but-joinsucks-28997951 http://www.slideshare.net/lvca/orientdb-nosqlday http://cs.olemiss.edu/~ychen/publications/conference/vicknair_acms e10.pdf http://orientdb.com/docs/last/concepts.html
All done