1
Łukasz Pełszyński
2
NOSQL
NO to SQL?
3
NOSQL
NO to SQL?
4
NOSQL
5
NOSQL
Not Only SQL→ Odpowiednie
narzędzie do danego zadania
6
NOSQL
Not Only SQL→ Odpowiednie
narzędzie do danego zadania
→ Nie tylko SQL :)
7
NOSQL
Dlaczego właśnie teraz?→ Ogromne ilości danych→ Duże wzajemne
zależności między danymi
→ Zmienna natura danych→ Dostosowanie do nowej
architektury aplikacji
8
:)
9
MongoDB
Stworzona z myślą o wydajności
Wysoce skalowalna “Document oriented” Bogaty język zapytań
10
MongoDB
Upraszcza tworzenie oprogramowania
Ale nie ma transakcji :)
11
MongoDB
MongoDB is designed to be human-oriented.
It reduces the burden of programming.
It tries to push jobs back to machines.
You can accomplish more tasks with less work, in smaller yet readable code.
12
Czas na praktykę
Stworzenie bazy:→ use jteam;
13
Czas na praktykę
Stworzenie bazy:→ use jteam;
Tworzymy dokument:→ _doc = { name: 'Lukasz', position: 'boss', age: 24 };
14
Czas na praktykę
Stworzenie bazy:→ use jteam;
Tworzymy dokument:→ _doc = { name: 'Lukasz', position: 'boss', age: 24 };
Wstawiamy do nowej kolekcji:→ db.users.save(_doc);
15
Czas na praktykę
Stworzenie bazy:→ use jteam;
Tworzymy dokument:→ _doc = { name: 'Lukasz', position: 'boss', age: 24 };
Wstawiamy do nowej kolekcji:→ db.users.save(_doc);
Znajdujemy wstawiony rekord:→ db.users.find();
16
Więcej rekordów
names = [ 'Ala', 'Ola', 'Ela', 'Zenek', 'Zdzisław', 'U1', 'U2', 'U3', 'U4', 'U6' ];for (index in names) {
db.users.save({ name: names[index], age: 20 + parseInt(index), gender: 'unknown'});
};
17
Zapytania
Zapytania są dynamiczne:→ var cursor = db.users.find();→ cursor.hasNext();→ cursor.next();→ db.users.find().forEach(
function(x) { print(tojson(x)); }
);
18
Zapytania c.d.
Proste wyszukiwanie:→ db.users.find({age: 24});→ db.users.find({age: 24}).limit(1);→ db.users.find({age: 24}).sort({age: -1, name: -1});→ db.users.findOne({name:'Zenek'});
19
Zapytania c.d.
Proste wyszukiwanie:→ db.users.find({age: 24});→ db.users.find({age: 24}).limit(1);→ db.users.find({age: 24}).sort({age: -1, name: -1});→ db.users.findOne({name:'Zenek'});
Operator $in:→ db.users.find({name: {'$in': ['Lukasz', 'Ala']} });
20
Zapytania c.d.
Proste wyszukiwanie:→ db.users.find({age: 24});→ db.users.find({age: 24}).limit(1);→ db.users.find({age: 24}).sort({age: -1, name: -1});→ db.users.findOne({name:'Zenek'});
Operator $in:→ db.users.find({name: {'$in': ['Lukasz', 'Ala']} });
Where (używać jak najrzadziej)→ db.users.find( { $where: "this.age > 3" };
21
Zapytania c.d.
>→ db.users.find({ 'age' : { $gt: 24 } } );
<=→ db.users.find({ 'age' : { $lte: 24 } } );
22
Zaawansowane zapytania
_rec = { name: 'Lukasz', grad_years: [2005, 2010], conferences: { 2010: 'geecon', 2009: 'rupy', unknown: 'wtf' } };
db.users.save(_rec);
23
Zaawansowane zapytania c.d.
Hmm...→ db.users.find({'conferences.2010'
: 'geecon' }) ;
24
Zaawansowane zapytania c.d.
?!→ db.users.find({'conferences.2010'
: 'geecon' }) ; → db.users.find({'grad_years.0':
2005 }) ;
25
Zaawansowane zapytania c.d.
WTF?!→ db.users.find({'conferences.2010'
: 'geecon' }) ; → db.users.find({'grad_years.0':
2005 }) ;
→ db.users.find({"conferences.2010": "geecon", grad_years: 2005 }) ;
26
MongoDB + Java
Doskonałe wsparcie dla wszystkich popularnych języków→ http://www.mongodb.o
rg/display/DOCS/Drivers
27
W akcji
28
Pytania?