54
MongoDB, Neo4j & Co. Einführung NoSQL- Datenbanken_ Tobias Trelle @tobiastrelle

Einführung in NoSQL-Datenbanken

Embed Size (px)

Citation preview

Page 1: Einführung in NoSQL-Datenbanken

MongoDB, Neo4j & Co. Einführung NoSQL-Datenbanken_

Tobias Trelle@tobiastrelle

Page 2: Einführung in NoSQL-Datenbanken

Senior IT Consultant @codecentric

Software Architect

Java/JEE/RDBMS background

Committer Spring Data

@tobiastrelle

ttrelle

2

Page 3: Einführung in NoSQL-Datenbanken

NoSQL

3

Page 4: Einführung in NoSQL-Datenbanken

4

Page 5: Einführung in NoSQL-Datenbanken

What‘s My Name Again?

It’s not about using no SQL any more but about thinking beyond SQL for certain problems!

NoSQL

5

Page 6: Einführung in NoSQL-Datenbanken

Why NoSQL?

NoSQL databases help to solve the 3 problems of

BigData (Gartner, 2009):

• Volume (Menge an Daten)

• Variety (verschiedene Strukturen)

• Velocity (Geschwindigkeit)6

Page 7: Einführung in NoSQL-Datenbanken

The Trouble with Scaling

Vertical vs.Horizontal

Scalability

7

Page 8: Einführung in NoSQL-Datenbanken

Vertical Scalability

8

RAMCPU

Storage

Page 9: Einführung in NoSQL-Datenbanken

Vertical Scalability

9

RAMCPU

Storage

Page 10: Einführung in NoSQL-Datenbanken

Vertical Scalability

10

RAMCPU

Storage

Page 11: Einführung in NoSQL-Datenbanken

Vertical Scalability

Size

Cost

„BIG“ DATABASES SCALE

VERTICALLY

BUT AT WHATPRICE?

11

Page 12: Einführung in NoSQL-Datenbanken

Horizontal Scalability

RAMCPU

Storage

12

Page 13: Einführung in NoSQL-Datenbanken

Horizontal Scalability

RAMCPU

Storage

RAMCPU

Storage

RAMCPU

Storage

RAMCPU

Storage

RAMCPU

Storage

13

Page 14: Einführung in NoSQL-Datenbanken

Horizontal Scalability

RAMCPU

Storage

RAMCPU

Storage

RAMCPU

Storage

RAMCPU

Storage

RAMCPU

Storage

RAMCPU

Storage

RAMCPU

Storage

RAMCPU

Storage

RAMCPU

Storage

RAMCPU

Storage

RAMCPU

Storage

RAMCPU

Storage

RAMCPU

Storage

RAMCPU

Storage

RAMCPU

Storage

14

Page 15: Einführung in NoSQL-Datenbanken

Google Data Center

15

Page 16: Einführung in NoSQL-Datenbanken

Vertical vs. Horizontal Scalability

NOSQL DATABASES SCALE HORIZONTALLY

NEED AN

EXAMPLE?

MESSAGING SYSTEM OF (POWERED BY )

- 100 NODE CLUSTER- 87 BILLION R/W-OPERATIONS / DAY- 9+ BILLION MESSAGES / DAY- 4 PB COMPRESSED DATA / DAY- 45% GROWTH / MONTH SOURCE: NICOLAS SPIEGELBERG @

BERLIN BUZZWORDS, JUNE 2012

QUITE IMPRESSIVE

NUMBERS, EH?

16

Page 17: Einführung in NoSQL-Datenbanken

For a distributed computer system it is impossible to simultaneously provide all these three guarantees!

Partition

Tolerance

failure of single nodes doesn‘t effect

the overall system

CAP Theorem a.k.a Brewer’s Theorem (2000)

Consisteny all nodes

see the same data at the same time

Availability

a guarantee that every

request receives a response

PICK 2!

17

Page 18: Einführung in NoSQL-Datenbanken

Partion

Tolerance

Visual Guide to (No)SQL systems

Consisten

cy

Availability

18

Page 19: Einführung in NoSQL-Datenbanken

CAP – Netzwerk-Partition

19

Page 20: Einführung in NoSQL-Datenbanken

ACID vs. BASE

Atomicity

Consistency

Isolation

Durability1983

RDBMS

20

Page 21: Einführung in NoSQL-Datenbanken

ACID vs. BASE

ACID is a good idea, but it is not an unbreakable law! 2

1

Page 22: Einführung in NoSQL-Datenbanken

ACID vs. BASE

Basically Available

Soft State

Eventually consistent

2008

NoSQL

22

Page 23: Einführung in NoSQL-Datenbanken

Overview of NoSQL Categories

11 1 1

1 11 11

11

Column StoresKey-Value StoresK V

K V

K V

Graph Databases

23

Document Stores

KKK

V

V

K

V

V

Page 24: Einführung in NoSQL-Datenbanken

Current trends in the (No)SQL World

http://www.db-engines.com

24

Page 25: Einführung in NoSQL-Datenbanken

MongoDB

25

Page 26: Einführung in NoSQL-Datenbanken

MongoDBhumongous, engl. = gigantisch, riesig

26

Page 27: Einführung in NoSQL-Datenbanken

MongoDB > FaktenVersion 3.0.5Kategorie: DokumentenorientiertAbfragen: • Query-by-Example + reichhaltige

Operatoren• Aggregationen / MapReduce• Geodaten, Volltextsuche

Indizes: Primär-Index + frei wählbare, auch zusammengesetzte Sekundär-Indizes

Replikation: Master/Slave mit automatischen FailoverSharding: Auto-Sharding anhand wählbarem SchlüsselTX: Atomarität auf einem DatensatzAPI: • Binäres TCP/IP-basiertes Protokoll

• Treiber für viele Sprachen27

Page 28: Einführung in NoSQL-Datenbanken

MongoDB > FaktenLizenz: APGL (DB), Apache V2 (Treiber)Hersteller: MongoDB Inc. (vormals 10gen)Web: http://www.mongodb.orgGithub: https://github.com/mongodb

28

Page 29: Einführung in NoSQL-Datenbanken

MongoDB > Dokument

Dokument := Geordnete Menge von Key-Value-PaarenKey := UTF8-StringValue := Einfacher Datentyp | Array | Dokument

Einfacher Datentyp := UTF8-String| Integer32| Integer64| Double| Date| Boolean

…29

Page 30: Einführung in NoSQL-Datenbanken

MongoDB > Dokument{"_id" : ObjectId("53e3663ccb3bd259f9252f67"),"typ" : ["gastro", "kultur"],"name" : "Unperfekthaus","tags" : "uph unperfekt perfekt haus essen","desc" : "Im Unperfekthaus bekommen Künstler & Gründer ... ","adresse" : { "str" : "Friedrich-Ebert-Straße 18",

"plz" : 45127,"ort" : "Essen"

},"location" : {"type" : "Point",

"coordinates" : [ 7.0075, 51.45902 ]}

}

30

Page 31: Einführung in NoSQL-Datenbanken

MongoDB > Server

mongodServer

Database

Collection

local admin productstest

pois system.indexes system.profile

Doc 1Doc 2

Doc 3Index

...

...

Query Scope

31

Page 32: Einführung in NoSQL-Datenbanken

MongoDB > APIs

MongoDB-Server

Browser REST-Client

Treiber

Anwendung

HTTP(optional)

REST(optional)

TCP/IP

verwendet

32

Page 33: Einführung in NoSQL-Datenbanken

MongoDB > Java APIs

Object / DocumentMapper

Driver

MongoDB-Server

Java-Treiber

Spring Data MongoDB Morphia Jongo ...

TCP / IP

33

Page 34: Einführung in NoSQL-Datenbanken

MongoDB > Tools > Mongo Shell

34

Page 35: Einführung in NoSQL-Datenbanken

MongoDB > Tools > Robomongo

35

Page 36: Einführung in NoSQL-Datenbanken

Neo4J

36

Page 37: Einführung in NoSQL-Datenbanken

Neo4jGraph-Datenbank

37

Page 38: Einführung in NoSQL-Datenbanken

Neo4j > FaktenVersion 2.2.5Kategorie: Graphen-DatenbankAbfragen: Query Languages: Cypher, Gremlin:

• Graph Traversal• Aggregation, Projektion, …

Indizes: Primär-Index + frei wählbare, auch zusammengesetzte Sekundär-Indizes

Replikation: Master/Slave mit automatischen FailoverSharding: Keine disjunkte Verteilung, aber sog. Cache

ShardingTX: ACID, mit JDBC auch JTA

38

Page 39: Einführung in NoSQL-Datenbanken

Neo4j > FaktenAPI: • Java-API (Embedded)

• REST / HTTP• JDBC

Lizenz: GPL v3 (Community Edtion)Hersteller: Neo Technology Inc.Web: http://www.neo4j.org/Github: https://github.com/neo4j

39

Page 40: Einführung in NoSQL-Datenbanken

Neo4j > Graph

Graph := ( V, E ) mit

V := Menge Knoten (Vertices)E := Teilmenge von (V x V) (Edges)

Neo4j-Graph := Gerichteter Graph,Knoten und Beziehungen können

Eigenschaftenhaben sog. Property Graph

40

Page 41: Einführung in NoSQL-Datenbanken

Neo4j > Graph

name: "Joe"age: 35

name: "Neo4j" name: "MongoDB"

:Person

:Database :Database

:Graph :Document

:KNOWSskill: 10

since: 2007

:KNOWSskill: 5

41

Page 42: Einführung in NoSQL-Datenbanken

Neo4j > Server

Neo4jServer

Database Graph

Doc 2Doc 3Index

KnotenDoc 2Doc 3Beziehungen

Doc 2Doc 3Labels

Constraints

42

Page 43: Einführung in NoSQL-Datenbanken

Neo4j > APIs

Neo4j

(embedded)

JVM

Java API Anwendung

Neo4j

REST APITransactionalHTTP EndpointJDBC

43

Page 44: Einführung in NoSQL-Datenbanken

Neo4j > Tools > Web-Interface

44

Page 45: Einführung in NoSQL-Datenbanken

Redis

45

Page 46: Einführung in NoSQL-Datenbanken

RedisKey-Value-Datenbank

46

Page 47: Einführung in NoSQL-Datenbanken

Redis > FaktenVersion 3.0Kategorie: Key-Value-DatenbankAbfragen: Key-only, Pub/Sub

Indizes: Zugriff per se nur über Key

Replikation: Master/Slave mit autom. FailoverSharding: Hash-basierte, disjunkte Verteilung der

DatenTX: ACID mit opt. Locking auf Menge von KeysAPI: • Protokoll: ASCII over TCP/IP

• Treiber für viele Sprachen47

Page 48: Einführung in NoSQL-Datenbanken

Redis > FaktenLizenz: Three clause BSD licenseHersteller: Salvatore Sanfilippo (Pivotal) and Pieter

NoordhuisWeb: http://www.redis.io/Github: https://github.com/antirez/redis

48

Page 49: Einführung in NoSQL-Datenbanken

Redis > Key-ValueKey := StringValue := Simple Value | List | Set | Hash | ZSet

Simple Value := String | Integer

List := SV1, SV2, …

Set := SV1, SV2, … (eindeutig)

Hash := (K1, SV1, K2, SV2, …)

ZSet := (score_1, V1, score2, V2, …) (nach score sortierbar)

49

Page 50: Einführung in NoSQL-Datenbanken

Redis >Beispiel

Simple a:1

l:12

"hello Redis"

"hello"List

"Redis" "hello"

Set s:1 "hello" "Redis"

Hash h:1 name "Redis"

typ "key-value"

version 2.8

ZSet z:1 42 "/"

23 "/inbox"

2 "/inbox/joe"

50

Page 51: Einführung in NoSQL-Datenbanken

Redis > Server

redis-serverServer

Database

Keyspace

db0 db1 db15...

Key 1

Key 2

...

Value 1

Value 2

...

51

Page 52: Einführung in NoSQL-Datenbanken

Redis > APIs

High LevelFrameworks

Low LevelJava Clients

Redis Server

JRedis

Spring Data Redis

Jedis Lettuce

ASCII over TCP / IP

52

Page 53: Einführung in NoSQL-Datenbanken

Redis > Tools > redis-cli

53

Page 54: Einführung in NoSQL-Datenbanken

Redis > Tools > Redis Desktop Manager

54