Date post: | 06-May-2015 |
Category: |
Technology |
Upload: | develcz |
View: | 247 times |
Download: | 4 times |
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