1. NoSQL databáze, MongoDB
Lukáš Korous Morning Talk, 1.10.2015
Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
2. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
2
Stačí nám relační DB?
Co je NoSQL
SQL vs. NoSQL
MongoDB
Distribuovaná DB – MongoDB Replica Set
Provoz a monitoring (distribuované) MongoDB
databáze
OBSAH
3. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
3
Vznik 2015 – Software, DB, Sítě, Cloud
Lukáš Korous
MFF, Numerická matematika
Data - reporting, analýza, integrace, BI - Citibank, Vodafone
HPC SW pro vědecké výpočty - Univ. of Nevada, FAU Erlangen, RICE
Plzeň
První kontakt s MongoDB: 2011
Stanislav Ulrych
MFF, Teoretická informatika
Cloud - OpenStack, Big Data, SDN - Ultimum Technologies
SW pro HFT - algoritmické obchodování - NASDAQ, NYSE, BATS
O NÁS
4. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
4
STAČÍ NÁM RELAČNÍ DB?
5. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
5
V principu ANO, ale:
Výkon - potřebuji vysokou rychlost zpracování
požadavků na zápis a čtení?
Škálování – potřebuji umět rozšířit rozšiřovat a
zeštíhlovat DB?
Time-to-market aplikací – potřebuji rychle (agilně)
vyvíjet aplikace nad DB?
Flexibilita datového modelu – Mám nestrukturovaná
nebo proměnlivá data?
TCO - potřebuji snižovat náklady?
Failover – chci zajistit úroveň služeb pro uživatele (SLA)?
STAČÍ NÁM RELAČNÍ DB?
6. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
6
V principu ANO, ale:
Výkon - potřebuji vysokou rychlost zpracování
požadavků na zápis a čtení?
Škálování – potřebuji umět rozšířit rozšiřovat a
zeštíhlovat DB?
Time-to-market aplikací – potřebuji rychle (agilně)
vyvíjet aplikace nad DB?
Flexibilita datového modelu – Mám nestrukturovaná
nebo proměnlivá data?
TCO - potřebuji snižovat náklady?
Failover – chci zajistit úroveň služeb pro uživatele (SLA)?
STAČÍ NÁM RELAČNÍ DB?
7. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
7
V principu ANO, ale:
Výkon - potřebuji vysokou rychlost zpracování
požadavků na zápis a čtení?
Škálování – potřebuji umět rozšířit rozšiřovat a
zeštíhlovat DB?
Time-to-market aplikací – potřebuji rychle (agilně)
vyvíjet aplikace nad DB?
Flexibilita datového modelu – Mám nestrukturovaná
nebo proměnlivá data?
TCO - potřebuji snižovat náklady?
Failover – chci zajistit úroveň služeb pro uživatele (SLA)?
STAČÍ NÁM RELAČNÍ DB?
8. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
8
V principu ANO, ale:
Výkon - potřebuji vysokou rychlost zpracování
požadavků na zápis a čtení?
Škálování – potřebuji umět rozšířit rozšiřovat a
zeštíhlovat DB?
Time-to-market aplikací – potřebuji rychle (agilně)
vyvíjet aplikace nad DB?
Flexibilita datového modelu – Mám nestrukturovaná
nebo proměnlivá data?
TCO - potřebuji snižovat náklady?
Failover – chci zajistit úroveň služeb pro uživatele (SLA)?
STAČÍ NÁM RELAČNÍ DB?
9. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
9
V principu ANO, ale:
Výkon - potřebuji vysokou rychlost zpracování
požadavků na zápis a čtení?
Škálování – potřebuji umět rozšířit rozšiřovat a
zeštíhlovat DB?
Time-to-market aplikací – potřebuji rychle (agilně)
vyvíjet aplikace nad DB?
Flexibilita datového modelu – Mám nestrukturovaná
nebo proměnlivá data?
TCO - potřebuji snižovat náklady?
Failover – chci zajistit úroveň služeb pro uživatele (SLA)?
STAČÍ NÁM RELAČNÍ DB?
10. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
10
V principu ANO, ale:
Výkon - potřebuji vysokou rychlost zpracování
požadavků na zápis a čtení?
Škálování – potřebuji umět rozšířit rozšiřovat a
zeštíhlovat DB?
Time-to-market aplikací – potřebuji rychle (agilně)
vyvíjet aplikace nad DB?
Flexibilita datového modelu – Mám nestrukturovaná
nebo proměnlivá data?
TCO - potřebuji snižovat náklady?
Failover – chci zajistit úroveň služeb pro uživatele (SLA)?
STAČÍ NÁM RELAČNÍ DB?
11. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
11
V principu ANO, ale:
Výkon - potřebuji vysokou rychlost zpracování
požadavků na zápis a čtení?
Škálování – potřebuji umět rozšířit rozšiřovat a
zeštíhlovat DB?
Time-to-market aplikací – potřebuji rychle (agilně)
vyvíjet aplikace nad DB?
Flexibilita datového modelu – Mám nestrukturovaná
nebo proměnlivá data?
TCO - potřebuji snižovat náklady?
Failover – chci zajistit úroveň služeb pro uživatele (SLA)?
STAČÍ NÁM RELAČNÍ DB?
12. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
12
V principu ano, ale:
Výkon - potřebuji vysokou rychlost zpracování
požadavků na zápis?
Škálování – potřebuji umět rozšířit rozšiřovat a
zeštíhlovat DB?
Time-to-market aplikací – potřebuji rychle (agilně)
vyvíjet aplikace nad DB?
Flexibilita datového modelu – Mám nestrukturovaná
nebo proměnlivá data?
TCO - potřebuji snižovat náklady?
Failover – chci zajistit úroveň služeb pro uživatele (SLA)?
STAČÍ NÁM RELAČNÍ DB?
POKUD SI ODPOVÍME KLADNĚ, PAK JE
NOSQL PŘINEJMENŠÍM ZAJÍMAVÁ
ALTERNATIVA
13. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
13
CO JE NOSQL DATABÁZE?
Data v jiných strukturách než v tabulkách propojených cizími klíči
14. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
14
Data v jiných strukturách než v tabulkách propojených cizími klíči
Key-value pairs (Redis, …)
• Key: “o80273nrt2986t”
• Value: “Adam Smith”
Ale také
• Key: “o80273nrt2986t”
• Value: {
• “Name”: “NASA photo album”
• “Date”: “1st July 2015”
• “Pictures”: {
•
• …
}
}
Je na aplikaci, aby věděla co čekat jako value
CO JE NOSQL DATABÁZE?
15. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
15
Data v jiných strukturách než v tabulkách propojených cizími klíči
Column family store (Cassandra, …)
PeopleBirthPlaceTable
• Row1
• “Key”: “o80273nrt2986t”
• “Name”: “Adam Smith”
• “Birthplace”: “London, UK”
• Row2
• “Key”: “vzs89q3090hnhg54”
• “Name”: “John Rumpart”
• “Birthplace”: “San Francisco, CA, USA”
PeopleFavoriteColorTable
• Row1
• “Key”: “mahw08euaytn81”
• “Name”: “Adam Smith”
• “FavoriteColor”: “Blue”
• Row2
• “Key”: “asg6a7dnoijs4g9dga”
• “Name”: “John Rumpart”
• “FavoriteColor”: “Red”
CO JE NOSQL DATABÁZE?
Denormalizace
Každý “use case” jiné
Tabulky
Klíče
16. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
16
Data v jiných strukturách než v tabulkách propojených cizími klíči
Graph
Problematické pro často se měnící vztahy mezi entitami
CO JE NOSQL DATABÁZE?
17. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
17
Data v jiných strukturách než v tabulkách propojených cizími klíči
Document database (MongoDB, CouchDB, …)
Aktuálně nejvšestrannější (a nejpoužívanější)
CO JE NOSQL DATABÁZE?
18. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
18
SQL (ACID)
Atomicity: all-or-nothing
Consistency: all-the-time? yes
Isolation: discrete (vs. continuous)
Durability
NoSQL (BASE)
Basically Available: some response guaranteed
Soft State: continuous (vs. discrete)
Eventual Consistency: all-the-time? no
SQL VS. NOSQL
19. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
19
NoSQL SE NEHODÍ NA:
Business Intelligence, Reporting, Analýza, DWH, DM
E-shop, Online banking, Stocks trading, … ($$$)
NoSQL (PODSTATNĚ) ZAOSTÁVÁ ZA SQL (RDBMS) v:
Složité časté dotazování
• SQL: 20 let optimalizace JOINů
Méně pokročilé vyspělé funkcionality out-of-the-box
• SQL: CURSOR, TRIGGER, OVER
(NA) CO NENÍ NOSQL?
20. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
20
MONGODB
21. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
21
MONGODB
Document database
Nejpopulárnější NoSQL databáze
Vlastní open-source formát BSON (Binary JSON)
22. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
2
SQL <-> MONGODB
Table
Row
Column
Index
Join
Collection
Document
Field
Index
Embedded or Linked
Document
~
~
~
~
~
MongoDBSQL
23. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
2
SQL <-> MONGODB : SELECT
SELECT * FROM
users
WHERE
age > 25 AND
age <= 50
ORDER BY
height
db.users
.find({
age:{ $gt: 25, $lte: 50 }
})
.sort({
height: 1
})
SQL MongoDB
24. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
2
SQL <-> MONGODB : UPDATE #1
UPDATE
users
SET
experience = ‘master’
WHERE
age > 40 AND
age <= 50
db.users
.update (
{ age:{ $gt: 40, $lte: 50 } },
{ $set: { experience:‘master’} },
{ multi: true }
)
SQL MongoDB
25. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
2
SQL <-> MONGODB : UPDATE #2
UPDATE
users
SET
level = level + 1
WHERE
age > 40 AND
age <= 50
db.users
.update (
{ age:{ $gt: 40, $lte: 50 } },
{$inc: { level : 1} },
{ multi: true }
)
SQL MongoDB
*$inc: operator
(http://docs.mongodb.org/manual/reference/
operator)
26. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
26
DISTRIBUOVANÁ DB S MONGODB
Failover & (Read) Scaling
Replica Set
27. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
27
DISTRIBUOVANÁ DB S MONGODB
Failover & (Read) Scaling
28. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
28
DISTRIBUOVANÁ DB S MONGODB
SECONDARY server neodpovídá
29. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
29
DISTRIBUOVANÁ DB S MONGODB
SECONDARY server neodpovídá
PRIMARY pouze zaznamená nedostupnost
30. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
30
DISTRIBUOVANÁ DB S MONGODB
Zpět (vše běží)
31. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
31
DISTRIBUOVANÁ DB S MONGODB
PRIMARY server neodpovídá
32. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
32
DISTRIBUOVANÁ DB S MONGODB
PRIMARY server neodpovídá
SECONDARY servery volí PRIMARY mezi sebou
Driver se přepojí na zvolený PRIMARY
33. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
33
DISTRIBUOVANÁ DB S MONGODB
Replica Set
2n+1 serverů => n-server fault tolerance
Velmi rychlý automatický failover
Nutné monitorovat přímo MongoDB procesy
Vnější monitoring nestačí pro výpadky
replicaSetu
Zabbix – šablony
Autentizace, autorizace přímo v DB
=> automatická replikace
Drivery pro aplikace odstiňují od interní podoby
Replica Setu
35. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
35
Autentizace
LDAP
Autorizace (Role-based Access)
Podobně jako v RDBMS
SSL/TLS, Network filter
Audit
Host Security – Encryption, Permissions, FW
BEZPEČNOST V MONGODB
36. Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu
Školení MongoDB
Architektura
Datové typy
Nástroje pro správu
Instalace, Backup, Restore
User management
Replication management
Dotazování
základní (insert, find, update)
pokročilé (operátory, agregace)
indexy, map-reduce
37. Děkuji za pozornost
Lukáš Korous Morning Talk, 1.10.2015
Brno - Holandská 878/2
Praha – Krakovská 9
www.softica.cz
info@softica.eu