👁️
pierreinside
  • Introduction
  • Workbench
    • VirtualBox
    • Linux
      • Linux-Paketverwaltung
      • Linux Initialisierung
      • Ubuntu 14.10 LTS
      • Ubuntu 16.04 LTS
      • Ubuntu 18.04 LTS
      • Ubuntu 20.04 LTS
      • Ubuntu - Netzwerk
    • Konsole
      • ssh
      • zsh
      • cygwin
      • Babun
      • terminator
      • Terminal Multiplexer
      • Linux Tools
    • awesome
    • Entwicklungsumgebungen
      • Texteditors
      • Visual Studio Code
      • IntelliJ - IDEA
  • Softwareentwicklungsprozess
    • Schätzungen
    • Eventstorming
    • OKR
  • Architektur
    • Uncle Bob
    • Microservices
    • NoSQL
      • ElasticSearch
    • Hystrix
    • Reactive Programming
    • AngularJS
    • Service Mesh
  • Networking
    • Dependency Injection
  • Programming
    • Java Core/EE
      • Java 8
      • Java Annotationen
      • Bean Validation
      • Enterprise Java Beans Specification
      • Dependency Injection
    • JRebel
    • Webservices
      • HTTP
      • REST
      • Spring MVC REST
      • Swagger
      • Postman
    • Spring Ecosystem
      • Spring Core
      • Spring Boot
        • Programming
        • Production Ready
        • Testing
      • Spring Cloud
      • Spring Cloud Config
      • Spring MVC
      • Spring Data
      • Spring Petclinic
    • NodeJS
    • UI-Technologie
      • Thymeleaf
      • ionic
      • Web Fonts
      • Jinja Templates
      • Twitter Bootstrap
    • Python Ecosystem
      • Python Libraries
      • Python Testing
      • Python Best-Practices
      • Python Snippets
      • Python Selenium
      • Kivy UI
      • FastAPI
      • Typer CLI
      • Django
    • Groovy
    • Persistenz
      • Transactions
        • Java TX
        • JPA TX
      • TX Handling
      • JPA
        • Eclipse Link
      • MySQL
        • MySQL Performance
        • Docker MySQL
      • Hazelcast
    • Glassfish
    • YAML
    • Angular
    • Camel
    • Zeichenkodierung
    • Kinder lernen Programmieren
  • Testen
    • Easymock
    • Mockito
  • Performance & Scalability
    • Java Performance
      • Heapdump Analysis
    • Java Concurrency
    • Instana
  • Sicherheit
    • Authentifizierung
      • OpenID Connect
      • Web-Authentication API
    • Authorisierung
      • OAuth
      • SAML
    • Spring Security
    • Zertifikate
    • Kali Linux
    • VPN
    • Zero-Trust-Networks
  • Build und Deployment
    • Maven
    • Bamboo
    • Jenkins
      • Jenkins Pipelines
      • Jenkins Pipelines Tips und Tricks
      • Jenkins-configuration-as-Code
      • Jenkins IDE
    • Travis CI
    • Shellprogrammierung
      • jq - JSON Parsing
    • Konfiguration Management
    • Vagrant
      • Vagrant-Ansible-Integration
      • Vagrant Box bauen
    • Ansible
      • Getting Started
      • Ansible Details
    • Saltstack
    • LinuxKit
    • Container
      • Docker
        • Docker Getting Started
        • Debugging Docker
        • Docker Build
        • Docker Registry
        • Docker run
          • docker run
          • docker network
        • Docker Compose
        • docker machine
        • Docker@Windows
        • Docker Host
        • Docker Scaling
        • Docker Ressources
        • Docker Logging
        • windowsContainer
      • Cloud Deployment Provider
        • AWS
          • Anwendungsdeployment
          • Workload
          • Permissions
          • Netzwerke
          • AWS CLI
            • aws-vault
          • RDS
          • Static Website Hosting
          • EKS - Elastic Kubernetes Service
          • S3
        • Google Cloud Platform
      • Docker Orchestrierung
        • CoreOS
        • Kubernetes
          • microK8s
          • minikube
          • autoscaler
          • Docker
          • k9s
        • Nomad
    • PHP
  • Operations
    • Proxy
      • NGINX
    • DNS
    • Logging
      • Graylog
      • Fluentd
    • Monitoring
      • Grafana
    • Infrastructure-as-Code
      • Terraform
        • AWS-Provider
        • GitHub-Provider
      • Packer
    • Deployment
      • Vault
      • Consul
        • Consul Template
      • Fabio
  • Rechtliches
    • Software-Lizenzen
  • Git Ecosystem
    • Git
      • Git Lifecycle Hooks
    • GitHub
      • GitHub Organizations
    • GitHub Actions
    • GitHub Pages
    • GitHub CLI
    • GitHub Copilot
    • GitHub-AWS OIDC
    • GitBook
    • GitLab
    • Bitbucket/Stash
  • Publishing
    • WordPress
    • Markdown
    • Static Site Generators
      • Hugo
      • Jekyll
    • Tiddly Wiki
    • Leanpub
    • Animationsfilme
  • Storage
    • Synology 2012
    • Synology 2021
  • Collaboration
    • Übersicht
    • Microsoft Teams
  • Konferenzen
    • Velocity Berlin 2019
  • IT mit Kindern
    • Projekt Sportstracker
    • Scratch
    • Pico Spielekonsole
  • Schule
    • Mathematik
  • Misc
    • Foto/Video
      • Foto/Video Sammlung bis 2023
        • Handbrake
        • Onedrive
      • Foto/Video Sammlung ab 2024
      • Gopro
      • Panasonic FZ1000 ii
        • als Webcam
      • AV Receiver
      • Videos erstellen
        • OBS Studio
        • Touch Portal
        • Game-Streaming
      • Kameratasche
      • Kamera 2020
    • Handy
      • 2016
      • 2018
      • 2019
      • 2021
      • 2022
    • Computer
      • Laptop
        • 2018
        • Chromebook
      • Monitor
        • 4k
      • Software
        • Command Line Interface
        • Google API
        • Plant UML
        • Chromium
        • Passwort-Manager
        • GPG
      • Dell CNF 2665 Farbdrucker
      • Dockingstation
      • Gaming PC 2021
      • Mobiles BĂźro
      • Mobiles Internet
      • Mobiler Router
    • Beamer Benq W1000+
    • Spielekonsole
      • 2017
        • Playstation 4
      • Pico Spielekonsole
    • Gadgets
      • iPad Pro 2015 und 2016
      • iPad Air 2024
      • Macbook Pro
      • Smartwatch
      • Slate
      • Mudi
    • Fahrrad
      • Jonas 2018
      • SQLab
    • Auto
      • Auto 2022
      • Camping
        • Camping Touren Ideen
          • Camping Tour - Gardasee 2021
        • Camper
          • Camper klein - keine StehhĂśhe
            • VW Bus Erfahrungen
          • Camper gross - StehhĂśhe
    • Haus
      • Klimaanlage
      • Swimming Pool
      • Quick Mill Orione 3000
      • SpĂźlmaschine 2021
      • Hebe-SchiebetĂźr
      • Gasgrill
      • Minibar / Mini-KĂźhlschrank
      • Glasfaseranschluss (Fiber-to-the-Home)
      • Smart-Home
        • Raspberry Pi
        • Heimnetzwerk
      • Homeoffice
      • Energie
        • Solar
        • Wärmepumpe
    • Freizeit
      • Musik Streaming
      • Sky
      • Online Lernplattformen
      • eScooter - ePowerFun
    • Fußball
      • Meine Arbeit als Fußball-Trainer
      • Fußball Tools
      • DFB TalentfĂśrderung
    • Google Impact Challenge
  • Englisch
Powered by GitBook
On this page
  • Motivation
  • Nachteile relationaler Datenbanken
  • Vorteile NoSQL Datenbanken
  • Nachteile von NoSQl Datenbanken
  • Kategorisierung
  • Produkte im Detail
  • Document Store - Elasticsearch
  • Graph Database - OrientDB
  • Elasticsearch

Was this helpful?

  1. Architektur

NoSQL

NoSQL ("Not only SQL" - nicht "No SQL") ist eine Gegenbewegung (seit 2009) zu relationalen Datenbanken.

Wenn ich im folgenden von Vorteilen/Nachteilen spreche, dann ist mir durchaus bewußt, daß es auf den Anwendungsfall ankommt ...

Motivation

NoSQL DEFINITION: Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontally scalable. (http://nosql-database.org/)

Typische Charakterisierungen:

  • schema-free

  • easy replication support

  • simple API

  • eventually consistent / BASE (not ACID)

  • huge amount of data

Nachteile relationaler Datenbanken

Datenstruktur

SQl-Datenbanken arbeiten gut, wenn die Daten einem festen Schema gehorchen. Ändert sich das Schema, dann muß es sich für alte und neue Daten ändern. Bei vielen Daten, deren Struktur und Semantik sich über die Zeit verändert (Lebenszyklus einer Software), führt das zu Problemen, die sich nur mit großen Kraftanstrengungen auf einer relationalen Datenbank abbilden lassen.

NoSQL-Datenbanken bieten sich an, wenn die zu speichernden bzw. suchenden Daten nicht besondes strukturiert sind (z. B. sich ßber die Zeit verändern). Bei einer ... bei einer Volltextsuche ßber Strings oder ganze Dokumente ist man bei NoSQL Datenbanken im richtigen Einsatzgebiet. Ein XML-Dokument ist zwar strukuriert, fßr eine Speicherung in relationalen Datenbankstrukturen (= Tabellen) ist es aber kaum geeignet, weil schon die Anwendung der ersten Normalform relationaler Datenbanken zu einem Problem fßhrt ("Jedes Attribut der Relation muss einen atomaren Wertebereich haben", https://de.wikipedia.org/wiki/Normalisierung_(Datenbank)#Erste_Normalform_(1NF)).

die Struktur häufig doch aus vielen optionalen Bestandteilen besteht, die wiederum schlecht in das

Solche Dokumente lassen sich in relationalen Datenbanken beispielsweise folgendermaßen speichern:

  • Ansatz 1: verwendet man CLOBs oder BLOBs

  • Ansatz 2: spaltet das Dokument in mehrere Tabellen/Spalten auf

Nachteile dieser Ansätze:

  • Ansatz 1: Suchen auf den Daten ist nicht performant - es sei denn die Datenbank verfĂźgt Ăźber entsprechende NoSQL-Erweiterungen

  • Ansatz 2: sehr aufwendig - Boilerplate-Mapping-Code (fehleranfällig, schwer wartbar)

Viele relationale Datenbanken antworten auf den Trend mit entsprechenden Erweiterungen, die sich mehr (PostgreSQL) oder weniger gut anfĂźhlen. Letztlich macht eine NoSQL Datenbank aber nicht nur die AbfragemĂśglichkeit aus, sondern ganz besonders auch die Skalierbarkeit. Und hier sind NoSQL Datenbanken relationalen Datenbanken mit NoSQl-Features deutlich Ăźberlegen.

Vorteile NoSQL Datenbanken

  • Versionierung out-of-the-box

  • Replikation out-of-the-box => horizontale Skalierung leicht

    • das wird bei der Parallelisierung von Abfragen ausgenutzt

  • schemalos (bei ElasticSearch spricht man von einem schemaless-schema) - kommt also gut mit Änderungen an den Schemata zurecht

Nachteile von NoSQl Datenbanken

  • häufig verwendet man NoSQL Datenbanken nicht als einzige Datenbank, sondern parallel zu einer transaktionalen relationalen Datenbank. Insofern hat Hot Data in der relationalen Datenbank und synchronisiert sie in die NoSQl Datenbank ("cold" data). Somit dauert es eine Weile bis hot data auf der NoSQL Datenbank angekommen sind und indiziert wurden (und damit auch gefunden werden kĂśnnen). Insofern kann die Aktualität einer NoSQL-Abfrage eingeschränkt sein ... dafĂźr bekommt man die Ergebnisse allerdings rasend schnell.

Kategorisierung

Innerhalb von NoSQL-datenbanken unterscheidet man folgende Typen:

  • Wide Column Store

    • Cassandra

  • Document Store

    • ElasticSearch

    • MongoDB

    • CouchDB

  • Tuple Store

    • Redis

  • Graph Database

    • Neo4J

  • Object Database

    • Versant

    • db4o

  • Grid & Cloud Database

  • XML-Database

  • ...

Wie man sieht gibt es also eine ganze Reihe unterschiedlicher NoSQL-Datenbank-Kategorien (die Grenzen sind schwimmend) und zu jeder Kategorie unzählige Produkte.

Produkte im Detail

Document Store - Elasticsearch

  • no ACID transaction support

  • no good support for relations ... Graph databases are addressing it

Graph Database - OrientDB

  • Homepage

  • Training

This seems to be the EierlegendeWollmilchsau - a mixture of the best of different storage approaches:

  • OrientDB Feature in comparison to RDBMS, DocumentStore, other GraphDBs

What makes OrientDB outstanding

Distributed Reliability Most NoSQL solutions are used as “cache” to speed up certain use cases, while the master database remains a relational DBMS. For this reason, the average NoSQL product is built more for performance and scalability, while sacrificing reliability.

OrientDB, however, isn’t the average NoSQL DBMS. What happens when a server node crashes? Thanks to WAL (Write Ahead Logging), OrientDB is able to restore the database content after a crash. Any pending transactions are automatically rolled back. Immediately, the server cluster redistributes the load across the available nodes and all the clients connected to the node in failure are automatically switched to an available server node with no fail-over to the application level. It is

  • lightning fast

    • relations are modeled by persistent pointers and not runtime joins ... optimized for read access

    • distributed => scalable

  • has Spring Data support (https://github.com/noskovd/spring-data-orient) - not official

Elasticsearch

siehe eigener Artikel

PreviousMicroservicesNextElasticSearch

Last updated 3 years ago

Was this helpful?