SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
Wachsende Daten beanspruchen schnellere und klügere Systeme, um die Datenverarbeitung bewältigen zu können. Die zeitgemäße Antwort darauf lautet: Big Data mit NoSQL! MongoDB ist eine der beliebtesten NoSQL-Datenbanken und bietet dem .NET-Entwickler einige Vorteile gegenüber bekannter SQL-Datenbanken. Der MongoDB-Experte Gregor Biswanger zeigt in seiner Session dazu einen perfekten Überblick und einige Tipps zum Einstieg aus der Praxis.
Freelancer as consultant, author, speaker & trainer
Wachsende Daten beanspruchen schnellere und klügere Systeme, um die Datenverarbeitung bewältigen zu können. Die zeitgemäße Antwort darauf lautet: Big Data mit NoSQL! MongoDB ist eine der beliebtesten NoSQL-Datenbanken und bietet dem .NET-Entwickler einige Vorteile gegenüber bekannter SQL-Datenbanken. Der MongoDB-Experte Gregor Biswanger zeigt in seiner Session dazu einen perfekten Überblick und einige Tipps zum Einstieg aus der Praxis.
1.
Yes zu NoSQL mit MongoDB
Für .NET-Entwickler
Gregor Biswanger | Freier Berater, Trainer, Autor und Sprecher
about.me/gregor.biswanger
2.
Über mich
▪ Freier Berater, Trainer und Autor
▪ Schwerpunkte: Softwarearchitektur, Web und
Cross-Plattform Entwicklung mit JavaScript
▪ Technologieberater für die Intel Developer Zone
▪ Internationaler Sprecher auf Konferenzen und
User Groups
▪ Freier Autor für heise.de, dotnetpro,
WindowsDeveloper und viele weitere
Fachmagazine
▪ Video-Trainer bei video2brain und Microsoft
Gregor Biswanger
Microsoft MVP, Intel Black Belt &
Intel Software Innovator
cross-platform-blog.de
about.me/gregor.biswanger
3.
Unser Reiseplan
▪ Einstieg in MongoDB mit C#
▪ Immobilien App in ASP.NET Core
▪ Verbindung aufbauen
▪ Dokumente erzeugen
▪ Speichern und Verändern
▪ Abfragen
▪ GridFS
▪ LINQ-Support
▪ Fluent Aggregation API
▪ CRUD
▪ Eventing
▪ Joins
5.
Was ist MongoDB?
▪ Steht für das Englische Wort: humongous
(Enorm)
▪ Eine Open-Source Datenbank
▪ Veröffentlicht 2009
▪ Eine dokumentenorientierte NoSQL-
Datenbank
▪ Die Dokumente basieren auf JSON/BSON
▪ Läuft auf Windows, Mac und Linux
▪ MongoDB ist mit offiziellen Treibern
ausgestattet für C, C++, C#, Haskell, Java,
JavaScript, Lisp, Perl, PHP, Python, Ruby und
Scala
▪ Bester Entwickler-Komfort ist mit JavaScript
(Node.js)
Download
mongodb.org
6.
Installation unter Windows
▪ MongoDB kann ohne
Abhängigkeiten direkt
heruntergeladen und
ausgeführt werden
▪ http://www.mongodb.com
▪ Installation wird über
einen Installer
empfohlen, für
automatisches festlegen
vom Pfad etc.
▪ Empfohlen wird für das
Produktivsystem nur die
64-Bit Version
8.
Der Mongo Daemon
▪ Ist der MongoDB Service
▪ Wird ausgeführt über mongod (Linux) oder mongod.exe (Windows)
▪ Kann direkt ausgeführt werden oder benötige Installation von
Frameworks etc.
▪ Standardverzeichnis für die DB:
▪ Windows: „datadb“
▪ Linux: „/data/db“ – Ubuntu „/var/lib/mongodb“
▪ Standard Port: 27017
9.
Die Mongo Shell
▪ Ein CLI-Tool um interaktiv auf die MongoDB
zugreifen zu können
▪ Datenzugriff
▪ Administration
▪ Wird ausgeführt über mongo (Linux) oder
mongo.exe (Windows)
▪ Interaktives JavaScript Interface
▪ Läuft auf der JavaScript-Engine SpiderMonkey (Mozilla)
▪ JavaScript-Dateien können ebenfalls als
automatisierte Script-Dateien hinterlegt werden
10.
Robo 3T
▪ Kostenloses Verwaltungstool für
den Desktop
▪ Hieß früher Robomongo
▪ Läuft Cross-Plattform:
Windows, Mac und Linux
▪ Als Portable oder über Setup
▪ Studio 3T ist die
kostenpflichtige Enterprise
Version
Download
robomongo.org
12.
Identifizierung
▪ Die wichtigste Regel für Dokumente: Sie benötigen ein _id Feld
▪ Unterstütze Datentypen als ID:
▪ Number
▪ String
▪ Object
▪ ISODate()
▪ Nicht Unterstützer Datentyp:
▪ Array (Obwohl es auch vom Typ Object ist)
13.
ObjectId
▪ Wenn kein _id Feld definiert
wurde, wird automatisch eine
ID mit der ObjectId-Funktion
festgelegt
▪ Eine mit ObjectId definierte ID,
beinhaltet einen Timestamp
▪ Das erspart ein zusätzliches
Feld wie z.B. CreatedTime
> db.foo.save({ name: "Max Mustermann" });
WriteResult({ "nInserted" : 1 })
> db.foo.find()
{ "_id" : ObjectId("5b0213dc7bb4413b6883cb05"),
"name" : "Max Mustermann" }
> db.foo.find()[0]._id.getTimestamp()
ISODate("2018-05-21T00:33:32Z")
14.
Support für C#
▪ Der Mongo C# Driver ist die offizielle MongoDB API für C#
▪ NuGet MongoDB.Driver
▪ Open-Source auf GitHub
▪ https://github.com/mongodb/mongo-csharp-driver
▪ Support für
▪ Native Kommandos via Fluent Aggregation API
▪ LINQ
▪ Events
▪ GridFS
▪ Async-Await Support
43.
Replace oder Update?
▪ Für OOP-Entwickler ist das einfache Ersetzen beliebt
▪ Beim Ersetzen wird das Dokument erst geladen, verändert
und abgespeichert
▪ Beim Update wird direkt beim Datensatz der Wert verändert
▪ Ein Update ist daher wesentlich Performanter
▪ Ein Update sorgt ebenfalls für stabilere Datenzustände
(Verringert Concurrency-Probleme)
48.
LINQ Support
▪ Die AsQueryable-Methode erweitert eine MongoCollection um die
LINQ-Funktionalität
▪ LINQ-Befehle werden direkt als native Aggregation-Befehle
übersetzt
▪ Ideal für komplexe Abfragen
▪ http://mongodb.github.io/mongo-csharp-driver/2.7/reference/driver/crud/linq/
50.
Fluent
Aggregation API
Native Kommandos, ganz einfach!
51.
Die Fluent Aggregation API
▪ Die Aggregate-Methode erweitert eine MongoCollection um
weitere Extension-Methods, die direkt hintereinander Aufgerufen
werden können
▪ Diese basieren auf den gleichen nativen Mongo-Operatoren
▪ Project, Group, SortBy, Match, Limit, Skip, Unwind usw.
▪ Ideal für komplexe Abfragen
53.
LINQ vs. Fluent Aggregation API
▪ Beide sind ideal für komplexe Abfragen
▪ LINQ-Abfragen werden in den meisten Fällen sehr gut in native
Abfragen übersetzt
▪ LINQ ist ideal für .NET-Entwickler, die es bereits gewohnt sind damit zu
arbeiten
▪ Fluent Aggregation API, ist ideal für Entwickler die eher die native
Mongo API gewohnt sind
▪ Oder mehr Kontrolle über den tatsächlichen Abfragecode zur
Datenbank möchten
▪ In der Regel sollte sich ein Team darüber vorher abstimmen, welche der
beiden Möglichkeiten Hauptsächlich zum Einsatz kommen soll
60.
Eventing
▪ Der Mongo C# Driver bietet unterschiedliche Events an
▪ Es hilft beim Logging oder bei der Diagnose der
Datenkommunikation
▪ Es gibt unterschiedliche Event Types
▪ http://mongodb.github.io/mongo-csharp-driver/2.7/reference/driver_core/events/
61.
Event Types
▪ Allgemein
▪ ConnectionPoolAddedConnectionEvent
▪ Command-Events
▪ CommandStartedEvent, CommandSucceededEvent und
CommandFailedEvent
▪ Es sollten keine unnötigen Command-Events abonniert werden, da dies
unnötig die Performance beeinflusst
63.
Joins
▪ Dokumentenorientierte Datenbanken sollten in der Regel atomare
Dokumente beinhalten
▪ Es ist dennoch legitim unabhängige Dokumente zu erzeugen, die
eine Beziehung zueinander haben
▪ Das Zusammenführen beider Dokumente kann Client- und Server-
Seitig durchgeführt werden
▪ Die Client-Seitige Lösung wird aus Performancesicht nicht
empfohlen (Doppelte Anfragen an den Server)
▪ Server-Seitig bietet MongoDB dazu den Lookup-Operator