MongoDB
- Name von humongous = gigantisch (da geeignet für große Datenmengen)
- verbreitet, besonders in Kombination mit NodeJS
- JavaScript (+ zusätzliche Operatoren) für Verwaltung und Zugriff statt SQL
- Speichert Daten im BSON Format
- Binary JSON
- optimiert für schnellen Zugriff und geringen Speicherbedarf
- zusätzliche Datentypen, z. B. Datum
Datenbank Aufbau
Relational (dt/en) | MongoDB |
---|
Datenbank / Database | Database |
Tabelle / Table | Collection |
Zeile / Row | Document (16MB size limit) |
Spalte / Column | beliebig |
Views | Views |
Jedes Document erhält automatisch eine _id
als Schlüssel.
Datenmodell
- Dokument hat kein festgelegtes Schema innerhalb einer Collection
- Struktur von Dokumenten kann sich unterscheiden (z. B. bezüglich Attributen, Anzahl, Datentypen)
- Struktur jedes Dokuments kann nachträglich individuell verändert werden
- Normalerweise praktikabel, wenn Dokumente in Collections zumindest ähnliche Struktur aufweisen
- Es kann eine Schema Validierung angegeben werden, um Vorgaben zur Struktur zu machen
eingebettet vs. normalisiert
Anmerkungen
- Frage nach dem geeigneten Datenmodell durch Flexibilität ggf. schwieriger
- Entscheidung abhängig von den verwendeten Abfragen und deren Häufigkeit
- NoSQL: Applikation mit Abfragen zuerst, dann passendes Datenmodell
- Relational: Datenmodell unabhängig von Applikation, dann passende Abfragen
- Auf Effizienz ausgelegt
- Konsistenz bei CRUD Operationen muss über Code gewährleistet werden
Beispiel Datenmodell
Collection student
- {_id: ObjectId("1234ab"), studentNr: 123456, firstName: "Klaus", lastName: "Meng", semester: 2, faculty: "DM", course: "OMB", lecture_ids: [ObjectId("abc234"), ObjectId("5de678")]}
- {_id: ObjectId("23bc45"), studentNr: 234567, firstName: "Verena", lastName: "Rist", semester: 6, faculty: "DM", course: "MIB"}
- {_id: ObjectId("3412ce"), studentNr: 345678, firstName: "Samantha", lastName: "Holz", semester: 1, faculty: "DM", course: "OMB"}
Collection faculty
- {_id: ObjectId("1122aa"), name:"DM", course:["MIB", "OMB", "MKB"]}
- {_id: ObjectId("33ee55"), name:"IN"}
Collection lecture
- {_id: ObjectId("abc234"), name: "C#", faculty: "IN", student_ids: [ObjectId("1234ab")]}
- {_id: ObjectId("5de678"), name: "Zeichnen", faculty: "DM", student_ids: [ObjectId("1234ab")]}