Neo4j
Rodzaje baz danych
- Relacyjne
- Kolumnowe
- Obiektowe
- Dokumentowe
- Klucz-wartość
- Grafowe
- Od groma innych
Relacyjne bazy danych

Kolumnowe bazy danych

Relacyjna vs kolumnowa

1, Jan, Uciński, 6544, 2, Monika, Karolak, 3456, 3, Karol, Witka, 2345, 4, Kasia, Nowak, 7542
1, 2, 3, 4, Jan, Monika, Karol, Kasia, Uciński, Karolak, Witka, Nowak, 6544, 3456, 2345, 7542
Obiektowa baza
ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded
.newConfiguration(), DB4OFILENAME);
try {
Pilot pilot1 = new Pilot("Michael Schumacher", 100);
db.store(pilot1);
Pilot pilot2 = new Pilot("Rubens Barrichello", 99);
db.store(pilot2);
} finally {
db.close();
}ObjectSet result = db
.queryByExample(new Pilot("Michael Schumacher"));
Pilot found = (Pilot) result.next();
found.addPoints(11);
db.store(found);ObjectSet result = db
.queryByExample(new Pilot("Michael Schumacher"));
Pilot found = (Pilot) result.next();
db.delete(found);Dokumentowe
import pymongo
from pymongo import MongoClient
import datetime
client = MongoClient('localhost', 27017)
db = client.test_database
new_posts = [{"author": "Mike",
"text": "Another post!",
"tags": ["bulk", "insert"],
"date": datetime.datetime(2009, 11, 12, 11, 14)},
{"author": "Eliot",
"title": "MongoDB is fun",
"text": "and pretty easy too!",
"date": datetime.datetime(2009, 11, 10, 10, 45)}]
db.posts.insert(new_posts)
print "Ilość Majków: " + db.posts.find({"author": "Mike"}).count()Klucz-wartość
- REST
- Niezawodność
- Map reduce
- Operacje na dokumentach
- ...
curl -v -X PUT http://localhost:8091/riak/strona/index \
-H "Content-Type: text/html" \
-d "<html><body><h1>Jakaś durna strona</h1></body></html>"
curl -i -X POST http://localhost:8091/riak/people \
-H "Content-Type: application/json" \
-d '{"firstname" : "Jan", "lastname" : "Nowak"}'
curl http://localhost:8091/riak/people/6VZc2o7zKxq2B34kJrm1S0ma3PO
curl -i -X DELETE http://localhost:8091/riak/people/6VZc2o7zKxq2B34kJrm1S0ma3PO... i wiele, wiele innych ...
Grafowa baza danych


<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://www.example.org/terms/">
<rdf:Description rdf:about="http://www.example.org/ginger">
<name>Ginger Rogers</name>
<occupation>dancer</occupation>
<partner rdf:resource="http://www.example.org/fred"/>
</rdf:Description>
<rdf:Description rdf:about="http://www.example.org/fred">
<name>Fred Astaire</name>
<occupation>dancer</occupation>
<likes rdf:resource="http://www.example.org/ice-cream"/>
</rdf:Description>
</rdf:RDF>Property graph

Węzły


Relacje



Właściwości


Odpalamy Neo4j!
neo4j/bin/neo4j start
http://localhost:7474
http://localhost:7474/webadmin/
Operacje na Neo4j
- Cypher
- RESTful Web Services
- neo4j-shell
- Gremlin
neo4j-shell
// Tworzy nowy node i przechodzi do niego
mknode --cd
// Przechodzi do węzła o podanym numerze
cd 1
// Wraca w poprzednie miejsce
cd ..
// Tworzy relację od aktualnego węzła do jakiegoś nowego (-c)
mkrel -t KNOWS -c -v
// Tworzy relację od aktualnego węzła do węzła 123
mkrel -t KNOWS 123
// Ustawia się na relacji o podanym identyfikatorze
cd -r 2
// Ustawia jakąś właściwość na aktualnym węźle lub relacji
set someProperty "Some value"
// Wypisuje wszystkie relacje
ls -rv
// Wypisuje wszystkie informacje o node/relacji
ls -vGremlin
Neo4j API
enum RelationshipTypes implements RelationshipType { ACTS_IN };
GraphDatabaseService gds = new EmbeddedGraphDatabase("/path/to/store");
Node forrest=gds.createNode();
forrest.setProperty("title","Forrest Gump");
forrest.setProperty("year",1994);
gds.index().forNodes("movies").add(forrest,"id",1);
Node tom=gds.createNode();
tom.setProperty("name","Tom Hanks");
Relationship role=tom.createRelationshipTo(forrest,ACTS_IN);
role.setProperty("role","Forrest");
Node movie=gds.index().forNodes("movies").get("id",1).getSingle();
assertEquals("Forrest Gump", movie.getProperty("title"));
for (Relationship role : movie.getRelationships(ACTS_IN,INCOMING)) {
Node actor=role.getOtherNode(movie);
assertEquals("Tom Hanks", actor.getProperty("name"));
assertEquals("Forrest", role.getProperty("role"));
}Neo4j i Spring Data
Neo4j
By Artur Owczarek
Neo4j
- 638