Datenbanken

Abhängig vom Use Case.

Wichtigste Typen

  • SQL (relational)
  • NoSQL (dokumentenorientiert)
  • Graph Database
  • u.v.m.

SQL

  • Structured Query Language (SQL)
  • Strukturierung der Daten in Tabellen mit Abhängigkeiten (Relational Database)
  • Vermeidung von Duplikaten
  • Sehr effiziente Speicherung von Daten
  • Sicherstellung der Datenintegrität
  • Skalierung schwierig

Beispiele:
PostgreSQL, Oracle DB, Microsoft SQL Server, MySQL

NoSQL

  • Not Only SQL (NoSQL)
  • Speichern von Objekten (Blobs)
  • Skalierung einfach, aber...
  • Datenintegrität zwischen Objekten muss anderweitig sichergestellt werden

Beispiele:
MongoDB, DynamoDB, Cassandra

Graph Datenbanken

  • Spezialisierte NoSQL Datenbank mit gewissen Relationen
    (Bsp: Familie <-> Nachbarn)
  • Speichern von Objekten (Blobs)
  • Relation zwischen Objekten nach bestimmten Konzepten
  • Leicht skalierbar (Menge von Knoten)
  • Komplex da Spezialimplementation

Beispiele:
Neo4J, ArangoDB, Amazon Neptune

MongoDB

  • NoSQL / dokumentenorientiert
  • Daten als JSON Objekte
  • Simpler Einstieg
  • Einfache Interaktion mit JavaScript
  • Eingeschränkte Datenintegrität
  • Skaliert sehr gut

DB

Collection

Document

  • Repräsentiert einen Eintrag
  • BSON (Binary JSON) Dokument
  • _id: Object Id
  • <name>: <field-value>
  • Document docs
{
  "_id": "test-id",
  "name": "Frank"
}

MongoDB Compass

Download

Grafikoberfläche für Interaktionen:

  • Verbinden
  • Erstellen
  • Abfragen

Aufgabe: MongoDB

  1. Lade das MongoDB Docker-Image herunter
  1. Starte das Image in einem Container
  1. Installiere MongoDB Compass
  2. Erstelle eine DB petStore und eine Collection pets
  3. FĂĽge mindestens ein Dokument ĂĽber MongoDB Compass hinzu
  4. Ändere das Dokument
  5. Lösche das Dokument aus der Datenbank
  6. Bonus: FĂĽge mindestens 5 pets hinzu und stelle eine Abfrage die nach einem pet filtert

Spring Data

Repository

  • Ermöglicht CRUD Operationen
  • grundlegende Funktionalität bereits vorhanden
  • Automatisches parsen von Daten: Object Relational Model (ORM)
  • Erstellt Abfragecode "magisch" im Hintergrund

Maven dependency

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>

MongoDB Repository

public interface PetRepository extends MongoRepository<Pet, String> {}
  • Interface wird durch Spring implementiert und bereitgestellt
  • grundlegende Funktionalität vorhanden
  • Durch Keywords im Methodennamen können Queries definiert werden

MongoDb repository docs

MongoDb queries

MongoDB Test

  • Embedded MongoDB fĂĽr Tests
  • Bei Tests automatisch
    • Datenbank wird vor Test hochgefahren
    • Nach Test runtergefahren
<dependency>
  <groupId>de.flapdoodle.embed</groupId>
  <artifactId>de.flapdoodle.embed.mongo.spring30x</artifactId>
  <scope>test</scope>
  <version>4.6.2</version>
</dependency>

docker pull mongo

docker run --name meine-mongodb -d mongo:latest