Difference between revisions of "Small SPARQL, RDQL, etc. Cheat Sheet"
(Created page with "For the lack of the same, I'll put here some of my notes on SPARQL, RDQL, graph databases, and semantic web related topics in general... Will probably branch out to several pages...") |
(→Basic Observations) |
||
Line 7: | Line 7: | ||
== Basic Observations == | == Basic Observations == | ||
− | Main rule of thumb I observed in many systems - | + | Main rule of thumb I observed in many systems - try to guess what statement of the ''WHERE'' clause restricts the triplets set the most, and order the statements in increasing order of generality (most restrictive first). |
− | + | For example, lets find all items that "user X" bought, that are blue. Lets presume that there are many more blue items in the DB than items that "user X" bought. | |
− | + | ||
− | + | Then the query (get all things that are blue, that "user X" bought): | |
− | SELECT ?thing WHERE { | + | SELECT ?thing WHERE { ?thing _:color "blue" . "user X" _:bought ?thing } |
− | + | will typically run (much) slower, than (get all things that "user X" bought, that are blue): | |
− | + | SELECT ?thing WHERE { "user X" _:bought ?thing . ?thing _:color "blue" } | |
− | + | ||
− | SELECT ?thing WHERE { ?thing | + | Note that the result set is identical, but the former query first takes all the blue things and picks those bought by "user X", while the latter takes the small set of bought items and picks just the blue ones. |
+ | |||
+ | In general - '''graph databases are incredibly powerful tools, but it's up to you to make them smart!''' |
Revision as of 04:18, 30 August 2012
For the lack of the same, I'll put here some of my notes on SPARQL, RDQL, graph databases, and semantic web related topics in general... Will probably branch out to several pages in future, but for now, it's just a small mess.
Introduction
I'm using Redland 1.0.13, Raptor 2.0.4, and Rasqal 0.9.26 as reference implementation of SPARQL 1.0, SPARQL 1.1, and RDQL.
Basic Observations
Main rule of thumb I observed in many systems - try to guess what statement of the WHERE clause restricts the triplets set the most, and order the statements in increasing order of generality (most restrictive first).
For example, lets find all items that "user X" bought, that are blue. Lets presume that there are many more blue items in the DB than items that "user X" bought.
Then the query (get all things that are blue, that "user X" bought):
SELECT ?thing WHERE { ?thing _:color "blue" . "user X" _:bought ?thing }
will typically run (much) slower, than (get all things that "user X" bought, that are blue):
SELECT ?thing WHERE { "user X" _:bought ?thing . ?thing _:color "blue" }
Note that the result set is identical, but the former query first takes all the blue things and picks those bought by "user X", while the latter takes the small set of bought items and picks just the blue ones.
In general - graph databases are incredibly powerful tools, but it's up to you to make them smart!