sobota 27. prosince 2014

Titan

Tato knihovna pro grafové databáze je implementována v jazyce Clojure. Jazyk Clojure je dialekt jazyka Lisp. Domovskou stránkou knihovny Titan je http://thinkaurelius.github.io/titan/. Titan je šířený jako open source projekt a spadá pod licenci Apache 2.0. Pro ovládání databáze vytvořené pomocí knihovny Titan není vytvořen speciální databázový jazyk, jako je tomu u Neo4J. Grafová knihovna Titan umožňuje použití několika úložných beck-endů. Lze zde využít databáze Apache Cassandra, Apache HBase nebo Oracle BerkeleyDB.

Databázi můžeme ovládat pomocí přiložené aplikace, která využívá grafového dotazovacího jazyka Gremlin nebo pomocí Blueprints. Blueprints je uváděno jako standard API grafových databází.

Gremlin

Spuštěním následujícího příkazu se spustí terminál Gregmlin, ve kterém je již možné spouštět dotazy a příkazy ve stejnojmenném dotazovacím jazyce.

./bin/gramlin.sh
Dále, pro připojení k databázi a případnému vytvoření databáze, je nutné zadat adresu ke konfiguračnímu souboru. Příazy jsou připojení databáze a k ukončení připojení jsou následující:

g=TitanFactory.open('/directory/file')
g.shutdown()
Podrobný popis tvorby konfiguračního souboru lze nalézt ve složce conf stažené knihovny Titan, kde je to popsáno v souboru titan-cassandra-es.properties. Jednoduchým příkladem funkční konfigurace může být následující text tohoto konfiguračního souboru:

storage.backend=berkeleyje
storage.directory=db/berkeley
index.search.backend=elasticsearch
index.search.directory=db/es
index.search.elasticsearch.client-only=false
index.search.elasticsearch.local-mode=true
Klíčovou informací z configuračního souboru je použití úložného back-endu, který je v tomto případě BerkleyDB (berkeleyje).

Pro vytvoření vrcholu se použije funkce addVertex() a následně se vrcholu funkcí setProperty() nastaví požadované vlastnosti.

prom1 = g.addVertex()
prom1.setProperty('name','Jirka')
K vytvoření hrany se potom použije funkce addEdge(), kde se spojí například hrana prom1 a prom2 a nastaví se typ resp. popisek. Dále je samozřejmě zase možné dát hraně další vlastnosti podobně jako vrcholu.

g.addEdge(null,prom1,prom2,'KNOWS')

Jednudochý dotaz může vypadat následovně, kdy se grafové databáze ptáme na vrchol, který má vlastnost name s hodnotou "Jirka"

 g.V.has('name','Jirka')

Blueprint API

Aplikaci Gremlin a tento standard API vyvíjí stejná skupina lidí (TinkerPop), díky tomu je použití Blueprint v Javě velice podobné příkazům v aplikaci Gremlin. Zpracování databáze je zde transakční, proto je vhodné operace nad databází uzavírat do klauzule pro odchytávání vyjímek a po ukončení bloku příkazů zakončit příkazem shutdown().

Za zmínku už zde stojí asi jen fakt, že proměnná g, která se používala i v aplikaci Gremlin (zde má stejný význam) je datového typu TitanGraph, vrcholy vytvořené funkcí addVertex() jsou datového typu Vertex a hrany jsou typu Edge.



1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import com.thinkaurelius.titan.core.TitanFactory;
import com.thinkaurelius.titan.core.TitanGraph;
import com.tinkerpop.blueprints.*;


public class test {

 public static void main(String[] args) {
  
  TitanGraph g = TitanFactory.open("/home/greg/Plocha/experiment/soub");
  
  Vertex oz = g.addVertex(null);  
  oz.setProperty("name", "Jiri Bilek");  
  oz.setProperty("age", "24");  
    
  Vertex sz = g.addVertex(null);  
  sz.setProperty("name", "Tatka Bilek");  
    
  Edge e = g.addEdge( null, sz, oz, "parent");
  
  g.commit();
  
  
  if (g.getVertices("name", (Object)"Jiri Bilek").iterator().hasNext())
   System.out.println("Jiri Bilek is "+g.getVertices("name", (Object)"Jiri Bilek").iterator().next().getProperty("age")+" years old");
  else
   System.out.println("Zadny Jiri Bilek v databazi neni");
  
  
  g.shutdown();
 }

}


Zdroje:
http://www.tinkerpop.com/
http://s3.thinkaurelius.com/docs/titan/0.5.0/
http://titanium.clojurewerkz.org/articles/getting_started.html
http://thinkaurelius.github.io/titan/
http://euranova.eu/upl_docs/publications/an-empirical-comparison-of-graph-databases.pdf
http://clojure.org/

Žádné komentáře:

Okomentovat