Jiří Kosek: Potřebujeme dotazovací jazyky pro NoSQL

Post on 06-May-2015

247 views 4 download

transcript

Potřebujeme dotazovací jazyky pro NoSQL?

@jirkakosek

Potřebujeme dotazovací jazyky pro NoSQL?

@jirkakosek

NoSQL

Photo by Marshall Astor

Typické charakteristiky NoSQL

• žádné nejsou

• velké objemy dat

• distribuované zpracování

• odolnost proti výpadku

• jednoduché úložiště

– klíč/hodnota

– dokumenty (JSON)

Způsoby dotazování v NoSQL

• jednoduché dotazy pomocí URL parametrů přes REST rozhraní

• dotazy zapsané jako JSON

• map/reduce dotazy zapsané jako funkce (JS, Ruby, Erlang, …)

by John Muellerleile

{ "query": { "filtered": { "query": { "query_string": { "query": "drama" } }, "filter": { "term": { "year": 1962 } } } } }

JSON is simply cool!

Photo by Atelier Graphique

XQuery

• dotazovací jazyk pro nestrukturované dokumenty (původně XML)

• úsporná a jednoduchá syntaxe

• mnoho let vývoje a zkušeností

• přes 20 různých implementací

• další moduly jazyka

– XQuery Update (CRUD)

– XQuery Full-text

XQuery

• dotazovací jazyk pro nestrukturované dokumenty (původně XML)

• úsporná a jednoduchá syntaxe

• mnoho let vývoje a zkušeností

• přes 20 různých implementací

• další moduly jazyka

– XQuery Update (CRUD)

– XQuery Full-text

JSONiq

• JSONiq = XQuery – XML + JSON

{ "name" : "Jim", "age" : 13, "gender" : "male", "friends" : [ "Sarah" ] }

{ "name" : "Sarah", "age" : 13, "gender" : "female", "friends" : [ "Jim", "Mary", "Jennifer"] } { "name" : "Jim", "age" : 13, "gender" : "male", "friends" : [ "Sarah" ] }

Vstup

for $sarah in collection("users"), $friend in collection("users") where $sarah.name eq "Sarah" and (some $name in $sarah.friends[] satisfies $friend.name eq $name) return $friend

Dotaz

Výsledek

JSONiq

• JSONiq = XQuery – XML + JSON

{ "name" : "Jim", "age" : 13, "gender" : "male", "friends" : [ "Sarah" ] }

{ "name" : "Sarah", "age" : 13, "gender" : "female", "friends" : [ "Jim", "Mary", "Jennifer"] } { "name" : "Jim", "age" : 13, "gender" : "male", "friends" : [ "Sarah" ] }

Vstup

for $sarah in collection("users"), $friend in collection("users") where $sarah.name eq "Sarah" and (some $name in $sarah.friends[] satisfies $friend.name eq $name) return $friend

Dotaz

Výsledek

FLWOR výrazy

FOR

LET

WHERE

GROUP BY

ORDER BY

COUNT

RETURN

FLWOR výrazy

FOR

LET

WHERE

GROUP BY

ORDER BY

COUNT

RETURN

Jednotný dotazovací jazyk

• JSONiq/XQuery engine mapuje dotaz na primitivní operace a indexy použitého úložiště

• Možnosti JSONiq/XQuery splňují pravidlo 80/20

• Velice specifické vlastnosti jednotlivých NoSQL databází mohou být mapovány na nové funkce nebo operátory

Implementace

• Zorba (zorba.io) – JSONiq dotazy nad CouchDB, MongoDB, relačními

DB, SQLLite, Oracle NoSQL, …

– přidat podporu pro nové úložiště je relativně jednoduché

• Lux (github.com/msokolov/lux) – XQuery dotazy nad Lucene/Sorl

• Komeční XML databáze často podporují i přímou práci a ukládání JSON

Vyžadujte od své oblíbené NoSQL databáze dotazovací jazyk hodný roku 2013

Kde se dozvědět více

• Stahujte a zkoušejte

• http://jsoniq.org/

• Seznamte se s horkými novinkami na poli dotazovacích jazyků a semistrukturovaných dat

Konference XMLPrague 2014

14. až 16. únor 2014

http://xmlprague.cz

http://m.doporucim.cz/Kosek

Kde se dozvědět více

• Stahujte a zkoušejte

• http://jsoniq.org/

• Seznamte se s horkými novinkami na poli dotazovacích jazyků a semistrukturovaných dat

Konference XMLPrague 2014

14. až 16. únor 2014

http://xmlprague.cz

http://m.doporucim.cz/Kosek