Konsistenz • ACID-Transaktionen • Häufig schlecht skalierbar • NoSQL-Datenbanken: • Sehr vielfältig, oft hochspezialisierte Produkte • Oft auf lineare Skalierung und/oder Hochverfügbarkeit ausgelegt • Geringer Fokus auf Konsistenz • BASE statt ACID
verteilt) ist zu jedem Zeitpunkt konsistent • Sicherstellung der Konsistenz erfordert ggf. Einschränkung der Verfügbarkeit • Schwache Transaktionssicherheit (BASE) • Datenbanksystem kann über einen gewissen Zeitraum inkonsistent sein • Verzicht auf jederzeitige Konsistenz erlaubt höhere Verfügbarkeit A C I D tomicity onsistency solation urability B A S E asically vailable oft State ventually consistent
Inc. • Verfügbar als Open Source (AGPL) • Name stammt von „humongous“ („riesig“, „gigantisch“) • Skalierung über horizontale Fragmentierung („sharding“) • Projekt-Homepage: Ø https://www.mongodb.com
Datenbanken • Jede Datenbank besteht aus mehreren Collections • Jede Collection besteht aus mehreren Dokumenten • Jedes Dokument ist ein BSON-Dokument • BSON („Binary JSON“) ist eine Erweiterung von JSON um zusätzliche Datentypen • Mehr: Ø https://docs.mongodb.com/manual/core/databa ses-and-collections/ Ø https://docs.mongodb.com/manual/reference/b son-types/
Queries (wie z.B. JOINs in SQL)! • Keine Fremdschlüssel und keine referenzielle Integrität! CC-0, katharinakanns https://pixabay.com/de/otter-verkehrszeichen-warnung-tiere-1665106/
sein • Jeder Shard besteht aus mehreren Chunks • Jeder Shard wird von einem MongoDB-Server verwaltet • Ausführlich: Ø https://docs.mongodb.com/manual/sharding/ https://docs.mongodb.com/manual/sharding/
sein • Jeder Shard besteht aus mehreren Chunks • Jeder Shard wird von einem MongoDB-Server verwaltet • Der Zugriff erfolgt über einen Router, welche Anfragen an die entsprechenden Shards weiterleitet. https://docs.mongodb.com/manual/sharding/
über • eine Hashfunktion über den Shard Key • Vorteil: Gute Gleichverteilung möglich (setzt jedoch einen gut gewählten Shard Key voraus) • Nachteil: Range Queries über den Shard Key sind ineffizient • Einteilung in bestimmte Intervalle (Ranges) des Shard Keys • Vorteil: Range Queries über den Shard Key sind effizient • Nachteil: Keine Gleichverteilung sichergestellt https://docs.mongodb.com/manual/sharding/
• Gegenbeispiele: • „Why you should never use MongoDB“, http://www.sarahmei.com/blog/2013/11/11/why-you-should- never-use-mongodb • „Don‘t use MongoDB“, http://pastebin.com/raw/FD3xe6Jt CC-0, stevep https://pixabay.com/de/verwirrt-durcheinander-unlogisch-880735/
oder aufwändig zu errechnende Daten Warum Redis? • Hohe Geschwindigkeit durch In-Memory- Verarbeitung • Hashmap als unterliegende Datenstruktur. Bedeutet: Die meisten Operationen in Redis sind O(1) Applikation GET cacheKey (nil) db.collection.find({…}) { "_id": …} SET cacheKey "{_id:…}" EX 300 "OK"
Kanten (Nodes und Edges) • Jeder Knoten und jede Kante kann beliebige Attribute haben (ähnlich einer schemalosen Dokumentendatenbank) • Jeder Knoten und jede Kante kann beliebige Labels haben Ø https://neo4j.com/developer/guide-data- modeling/ • Abfragen gegen den Graphen sind über die Query Language Cypher möglich Ø https://neo4j.com/developer/cypher-query- language/ firstName: Martin lastName: Helmich Person University Company WORKS_AT since: 2008 WORKS_AT since: 2017 name: HSHL name: Mittwald Finde einen bestimmten Knoten: MATCH (p:Person) WHERE p.firstName = "Martin" RETURN p Finde alle Hochschulen, an denen Martin unterrichtet: MATCH (p:Person)-[:WORKS_AT]->(u:University) WHERE p.firstName="Martin" RETURN u Finde alle anderen Personen, die zusammen mit Martin an einer Hochschule unterrichten MATCH (m:Person)-[:WORKS_AT]->(:University) <-[:WORKS_AT]-(coworker:Person) WHERE m.firstName="Martin" RETURN coworker