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
JSON is simply cool!
{
"query": {
"filtered": {
"query": {
"query_string": {
"query": "drama"
}
},
"filter": {
"term": { "year": 1962 }
}
}
}

}
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
Vstup
{
"name" : "Sarah",
"age" : 13,
"gender" : "female",
"friends" : [ "Jim", "Mary",
"Jennifer"]
}

Dotaz
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

Výsledek

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

{

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

}
}
JSONiq
• JSONiq = XQuery – XML + JSON
Vstup
{
"name" : "Sarah",
"age" : 13,
"gender" : "female",
"friends" : [ "Jim", "Mary",
"Jennifer"]
}

Dotaz
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

Výsledek

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

{

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

}
}
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

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

  • 1.
  • 2.
  • 3.
  • 4.
    Typické charakteristiky NoSQL • • • • • žádnénejsou velké objemy dat distribuované zpracování odolnost proti výpadku jednoduché úložiště – klíč/hodnota – dokumenty (JSON)
  • 5.
    Způsoby dotazování vNoSQL • jednoduché dotazy pomocí URL parametrů přes REST rozhraní • dotazy zapsané jako JSON • map/reduce dotazy zapsané jako funkce (JS, Ruby, Erlang, …)
  • 6.
  • 7.
    JSON is simplycool! { "query": { "filtered": { "query": { "query_string": { "query": "drama" } }, "filter": { "term": { "year": 1962 } } } } }
  • 8.
  • 9.
    XQuery • dotazovací jazykpro 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
  • 10.
    XQuery • dotazovací jazykpro 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
  • 11.
    JSONiq • JSONiq =XQuery – XML + JSON Vstup { "name" : "Sarah", "age" : 13, "gender" : "female", "friends" : [ "Jim", "Mary", "Jennifer"] } Dotaz 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 Výsledek { "name" : "Jim", "age" : 13, "gender" : "male", "friends" : [ "Sarah" ] { "name" : "Jim", "age" : 13, "gender" : "male", "friends" : [ "Sarah" ] } }
  • 12.
    JSONiq • JSONiq =XQuery – XML + JSON Vstup { "name" : "Sarah", "age" : 13, "gender" : "female", "friends" : [ "Jim", "Mary", "Jennifer"] } Dotaz 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 Výsledek { "name" : "Jim", "age" : 13, "gender" : "male", "friends" : [ "Sarah" ] { "name" : "Jim", "age" : 13, "gender" : "male", "friends" : [ "Sarah" ] } }
  • 13.
  • 14.
  • 16.
    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
  • 17.
    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
  • 18.
    Vyžadujte od svéoblíbené NoSQL databáze dotazovací jazyk hodný roku 2013
  • 19.
    Kde se dozvědětví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
  • 20.
    Kde se dozvědětví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