Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Einführung in NoSQL-Datenbanken

789 Aufrufe

Veröffentlicht am

Nach einer kurzen Einführung in verteilte Systeme zeige ich die Motivation für die Entstehung von NoSQL-Datenbanken auf. Ich stelle die Haupt-Kategorien der NoSQL-Datenbanken vor: Key-Value, Column Store, Graphen- und Dokumentenoriente Datenbanken. Danach gehe ich auf konkrete Datenbanken wie MongoDB, Neo4j und Redis ein.

Veröffentlicht in: Daten & Analysen
  • Als Erste(r) kommentieren

Einführung in NoSQL-Datenbanken

  1. 1. MongoDB, Neo4j & Co. Einführung NoSQL-Datenbanken_ Tobias Trelle @tobiastrelle
  2. 2. Senior IT Consultant @codecentric Software Architect Java/JEE/RDBMS background Committer Spring Data @tobiastrelle ttrelle 2
  3. 3. NoSQL 3
  4. 4. 4
  5. 5. What‘s My Name Again? It’s not about using no SQL any more but about thinking beyond SQL for certain problems! NoSQL 5
  6. 6. Why NoSQL? NoSQL databases help to solve the 3 problems of BigData (Gartner, 2009): • Volume (Menge an Daten) • Variety (verschiedene Strukturen) • Velocity (Geschwindigkeit) 6
  7. 7. The Trouble with Scaling Vertical vs. Horizontal Scalability 7
  8. 8. Vertical Scalability 8 RAM CPU Storage
  9. 9. Vertical Scalability 9 RAM CPU Storage
  10. 10. Vertical Scalability 10 RAM CPU Storage
  11. 11. Vertical Scalability Size  Cost „BIG“ DATABASES SCALE VERTICALLY BUT AT WHAT PRICE? 11
  12. 12. Horizontal Scalability RAM CPU Storage 12
  13. 13. Horizontal Scalability RAM CPU Storage RAM CPU Storage RAM CPU Storage RAM CPU Storage RAM CPU Storage 13
  14. 14. Horizontal Scalability RAM CPU Storage RAM CPU Storage RAM CPU Storage RAM CPU Storage RAM CPU Storage RAM CPU Storage RAM CPU Storage RAM CPU Storage RAM CPU Storage RAM CPU Storage RAM CPU Storage RAM CPU Storage RAM CPU Storage RAM CPU Storage RAM CPU Storage 14
  15. 15. Google Data Center 15
  16. 16. 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 16
  17. 17. 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 17
  18. 18. Partion Tolerance Visual Guide to (No)SQL systems Consistency Availability 18
  19. 19. CAP – Netzwerk-Partition 19
  20. 20. ACID vs. BASE Atomicity Consistency Isolation Durability1983 RDBMS 20
  21. 21. ACID vs. BASE ACID is a good idea, but it is not an unbreakable law! 21
  22. 22. ACID vs. BASE Basically Available Soft State Eventually consistent 2008 NoSQL 22
  23. 23. Overview of NoSQL Categories 1 1 1 1 1 1 1 1 1 1 1 Column StoresKey-Value Stores K V K V K V Graph Databases 23 Document Stores K K K V V K V V
  24. 24. Current trends in the (No)SQL World http://www.db-engines.com 24
  25. 25. MongoDB 25
  26. 26. MongoDB humongous, engl. = gigantisch, riesig 26
  27. 27. MongoDB > Fakten Version 3.0.5 Kategorie: Dokumentenorientiert Abfragen: • 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 Failover Sharding: Auto-Sharding anhand wählbarem Schlüssel TX: Atomarität auf einem Datensatz API: • Binäres TCP/IP-basiertes Protokoll • Treiber für viele Sprachen 27
  28. 28. MongoDB > Fakten Lizenz: APGL (DB), Apache V2 (Treiber) Hersteller: MongoDB Inc. (vormals 10gen) Web: http://www.mongodb.org Github: https://github.com/mongodb 28
  29. 29. MongoDB > Dokument Dokument := Geordnete Menge von Key-Value-Paaren Key := UTF8-String Value := Einfacher Datentyp | Array | Dokument Einfacher Datentyp := UTF8-String | Integer32 | Integer64 | Double | Date | Boolean … 29
  30. 30. 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
  31. 31. MongoDB > Server 31
  32. 32. MongoDB > APIs 32
  33. 33. MongoDB > Java APIs 33
  34. 34. MongoDB > Tools > Mongo Shell 34
  35. 35. MongoDB > Tools > Robomongo 35
  36. 36. Neo4J 36
  37. 37. Neo4j Graph-Datenbank 37
  38. 38. Neo4j > Fakten Version 2.2.5 Kategorie: Graphen-Datenbank Abfragen: 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 Failover Sharding: Keine disjunkte Verteilung, aber sog. Cache Sharding TX: ACID, mit JDBC auch JTA 38
  39. 39. Neo4j > Fakten API: • 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
  40. 40. 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 Eigenschaften haben  sog. Property Graph 40
  41. 41. Neo4j > Graph name: "Joe" age: 35 name: "Neo4j" name: "MongoDB" :Person :Database :Database :Graph :Document :KNOWS skill: 10 since: 2007 :KNOWS skill: 5 41
  42. 42. Neo4j > Server 42
  43. 43. Neo4j > APIs 43
  44. 44. Neo4j > Tools > Web-Interface 44
  45. 45. Redis 45
  46. 46. Redis Key-Value-Datenbank 46
  47. 47. Redis > Fakten Version 3.0 Kategorie: Key-Value-Datenbank Abfragen: Key-only, Pub/Sub Indizes: Zugriff per se nur über Key Replikation: Master/Slave mit autom. Failover Sharding: Hash-basierte, disjunkte Verteilung der Daten TX: ACID mit opt. Locking auf Menge von Keys API: • Protokoll: ASCII over TCP/IP • Treiber für viele Sprachen 47
  48. 48. Redis > Fakten Lizenz: Three clause BSD license Hersteller: Salvatore Sanfilippo (Pivotal) and Pieter Noordhuis Web: http://www.redis.io/ Github: https://github.com/antirez/redis 48
  49. 49. Redis > Key-Value Key := String Value := 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
  50. 50. 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
  51. 51. Redis > Server 51
  52. 52. Redis > APIs 52
  53. 53. Redis > Tools > redis-cli 53
  54. 54. Redis > Tools > Redis Desktop Manager 54

×