nosql databáze, mongodb

37

Upload: lukas-korous

Post on 15-Apr-2017

229 views

Category:

Software


0 download

TRANSCRIPT

Page 1: NoSQL databáze, MongoDB
Page 2: NoSQL databáze, MongoDB

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

Page 3: NoSQL databáze, MongoDB

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

Page 4: NoSQL databáze, MongoDB

4

STAČÍ NÁM RELAČNÍ DB?

Page 5: NoSQL databáze, MongoDB

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?

Page 6: NoSQL databáze, MongoDB

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?

Page 7: NoSQL databáze, MongoDB

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?

Page 8: NoSQL databáze, MongoDB

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?

Page 9: NoSQL databáze, MongoDB

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?

Page 10: NoSQL databáze, MongoDB

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?

Page 11: NoSQL databáze, MongoDB

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?

Page 12: NoSQL databáze, MongoDB

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

Page 13: NoSQL databáze, MongoDB

13

CO JE NOSQL DATABÁZE?

Data v jiných strukturách než v tabulkách propojených cizími klíči

Page 14: NoSQL databáze, MongoDB

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?

Page 15: NoSQL databáze, MongoDB

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?

DenormalizaceKaždý “use case” jiné

TabulkyKlíče

Page 16: NoSQL databáze, MongoDB

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?

Page 17: NoSQL databáze, MongoDB

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?

Page 18: NoSQL databáze, MongoDB

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

Page 19: NoSQL databáze, MongoDB

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?

Page 20: NoSQL databáze, MongoDB

20

MONGODB

Page 21: NoSQL databáze, MongoDB

21

MONGODB

Document database

Nejpopulárnější NoSQL databáze

Vlastní open-source formát BSON (Binary JSON)

Page 22: NoSQL databáze, MongoDB

22

SQL <-> MONGODB

TableRow

ColumnIndex

Join

CollectionDocumentFieldIndexEmbedded or LinkedDocument

~~~~~

MongoDBSQL

Page 23: NoSQL databáze, MongoDB

23

SQL <-> MONGODB : SELECT

SELECT * FROMusers

WHEREage > 25 ANDage <= 50

ORDER BYheight

db.users.find({

age:{ $gt: 25, $lte: 50 }}).sort({

height: 1})

SQL MongoDB

Page 24: NoSQL databáze, MongoDB

24

SQL <-> MONGODB : UPDATE #1

UPDATEusers

SETexperience = ‘master’

WHEREage > 40 ANDage <= 50

db.users.update ({ age:{ $gt: 40, $lte: 50 } },{ $set: { experience:‘master’} },{ multi: true }

)

SQL MongoDB

Page 25: NoSQL databáze, MongoDB

25

SQL <-> MONGODB : UPDATE #2

UPDATEusers

SETlevel = level + 1

WHEREage > 40 ANDage <= 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)

Page 26: NoSQL databáze, MongoDB

26

DISTRIBUOVANÁ DB S MONGODB

Failover & (Read) Scaling

Replica Set

Page 27: NoSQL databáze, MongoDB

27

DISTRIBUOVANÁ DB S MONGODB

Failover & (Read) Scaling

Page 28: NoSQL databáze, MongoDB

28

DISTRIBUOVANÁ DB S MONGODB

SECONDARY server neodpovídá

Page 29: NoSQL databáze, MongoDB

29

DISTRIBUOVANÁ DB S MONGODB

SECONDARY server neodpovídá PRIMARY pouze zaznamená nedostupnost

Page 30: NoSQL databáze, MongoDB

30

DISTRIBUOVANÁ DB S MONGODB

Zpět (vše běží)

Page 31: NoSQL databáze, MongoDB

31

DISTRIBUOVANÁ DB S MONGODB

PRIMARY server neodpovídá

Page 32: NoSQL databáze, MongoDB

32

DISTRIBUOVANÁ DB S MONGODB

PRIMARY server neodpovídá SECONDARY servery volí PRIMARY mezi sebou Driver se přepojí na zvolený PRIMARY

Page 33: NoSQL databáze, MongoDB

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

Page 34: NoSQL databáze, MongoDB

34

Map-Reduce Nativní podpora map-reduce algoritmu

Capped Collections Superrychlá in-memory kolekce

Aggregation Pipeline Komplexnější dotazování

Sharded Cluster Cluster pro škálování Write operací

POKROČILÉ VLASTNOSTI MONGODB

Page 35: NoSQL databáze, MongoDB

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

Page 36: NoSQL databáze, MongoDB

Š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

Page 37: NoSQL databáze, MongoDB