SlideShare ist ein Scribd-Unternehmen logo
Yes zu NoSQL mit MongoDB
Für .NET-Entwickler
Gregor Biswanger | Freier Berater, Trainer, Autor und Sprecher
about.me/gregor.biswanger
Ü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
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
Einstieg in
MongoDB mit C#
Die ersten Schritte
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
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
Installation über den Paketmanager (Linux, Ubuntu)
1. Paketmanager Katalog updaten:
sudo apt-get update
2. MongoDB Paket installieren:
sudo apt-get install –y mongodb
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
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
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
Aufbau der MongoDB Datenstruktur
database
tables
rows
columns
database
collections
documents (BSON)
fields
SQL Terms / Konzepte MongoDB Terms / Konzepte
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)
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")
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
Dokumentation
http://mongodb.github.io/mongo-csharp-driver/
Verbindung
aufbauen
Die ersten Schritte
Ein neues Projekt anlegen
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Den Mongo C# Treiber über
NuGet installieren
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Eine Klasse hinzufügen
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Ermöglicht den Zugriff auf die
Datenbank und die Collections
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Dokumente
erzeugen
Von POCO zu BSON
Dokument-Serialisierung
Client Server
BSON
POCO
BSON
Dokument
JSON
Eine Klasse hinzufügen
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Datenklasse mit
Metainformationen
Speichern und
Verändern
Die Fütterungszeit für Mongo
Ermöglicht den Zugriff auf die
Datenbank und die Collections
Eine Klasse hinzufügen
Yes zu NoSQL mit MongoDB für .NET-Entwickler
DTO für das Formular
Eine Razor Page hinzufügen
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Die Code-Behind-Datei
von der Razor-Page
Die View von der
Razor-Page
Das Formular für ein
neues Mietobjekt
Die Daten in der
Datenbank
Eine Razor Page hinzufügen
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Eine Übersicht aller
Mietobjekte
Eine Klasse hinzufügen
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Entity für die
Preisänderung
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Eine Klasse hinzufügen
Yes zu NoSQL mit MongoDB für .NET-Entwickler
DTO für das
Formular
Eine Razor Page hinzufügen
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
{
"$set": {
"Age": 54
}
}
Native Mongo QueryMongo C# Driver
{
"$push": {
"Adjustments": [{
"OldPrice": 100.0,
"NewPrice": 200.0,
"Reason": "…"
}]
},
"$set": {
"Price": 200.0
}
}
Native Mongo QueryMongo C# Driver
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)
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Abfragen Haste mal nen Datensatz?
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
GridFS Mit Binären-Datensätzen arbeiten
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Eine Razor Page hinzufügen
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
LINQ Denken in LINQ!
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/
Yes zu NoSQL mit MongoDB für .NET-Entwickler
aggregate{
aggregate:"rentals",
pipeline:[
{
$project:{
PriceRange:{
$subtract:[
"$Price",
{
$mod:[
"$Price",
500.0
]
}
]
},
_id:0
}
},
...
...
{
$group:{
_id:"$PriceRange",
__agg0:{
$sum:1
}
}
},
{
$project:{
GroupPriceRange:"$_id",
Count:"$__agg0",
_id:0
}
},
{
$sort:{
GroupPriceRange:1
}
}
],
cursor:{
},
$db:"realestate"
}
Generierter Abfragecode
Fluent
Aggregation API
Native Kommandos, ganz einfach!
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
Yes zu NoSQL mit MongoDB für .NET-Entwickler
aggregate{
aggregate:"rentals",
pipeline:[
{
$project:{
PriceRange:{
$subtract:[
"$Price",
{
$mod:[
"$Price",
500.0
]
}
]
},
_id:0
}
},
...
...
{
$group:{
_id:"$PriceRange",
Count:{
$sum:1
}
}
},
{
$sort:{
_id:1
}
}
],
cursor:{
},
$db:"realestate"
}
Generierter Abfragecode
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
CRUD
Das ABC für die
Datenverarbeitung
Create
Read
Update
Delete
Eventing Reagieren auf Ereignisse
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/
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
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Joins Daten zusammenführen
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
Client-Seitiger Join
Server-Seitiger Join
Yes zu NoSQL mit MongoDB für .NET-Entwickler
http://about.me/Gregor.Biswanger
Ich freue mich auf Feedback!
Vielen Dank!

Weitere ähnliche Inhalte

PDF
Fachmodell-First: Einstieg in das NoSQL-Schema-Design
PDF
Intro to Cypher
PDF
[협업 도구] 위키를 활용한 협업 노하우
PDF
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
PDF
How to build massive service for advance
PDF
나만의 엔진 개발하기
PDF
Introduction to Neo4j
PPTX
MySQL_MariaDB-성능개선-202201.pptx
Fachmodell-First: Einstieg in das NoSQL-Schema-Design
Intro to Cypher
[협업 도구] 위키를 활용한 협업 노하우
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
How to build massive service for advance
나만의 엔진 개발하기
Introduction to Neo4j
MySQL_MariaDB-성능개선-202201.pptx

Was ist angesagt? (20)

PDF
DevOps with Database on AWS
PDF
Kdd 2014 Tutorial - the recommender problem revisited
PDF
게임서버프로그래밍 #8 - 성능 평가
PDF
アクセスプラン(実行計画)の読み方入門
PDF
MongoDB概要:金融業界でのMongoDB
PDF
DBパフォーマンスチューニングの基礎:インデックス入門
PDF
중앙 서버 없는 게임 로직
PDF
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
PDF
맵매칭 (부정확한 GPS포인트들로부터 경로 추정하기)
PDF
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
PPTX
Addressables で大量のリソース管理・困りどころと解消法
PPTX
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
PPTX
Nmap 9つの真実
PDF
Data pipeline with kafka
PDF
PostgreSQL:行数推定を読み解く
PDF
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
PPTX
Airflow를 이용한 데이터 Workflow 관리
PDF
プロのためのNode-RED再入門
KEY
Intro to Neo4j presentation
PDF
Learning to Rank for Recommender Systems - ACM RecSys 2013 tutorial
DevOps with Database on AWS
Kdd 2014 Tutorial - the recommender problem revisited
게임서버프로그래밍 #8 - 성능 평가
アクセスプラン(実行計画)の読み方入門
MongoDB概要:金融業界でのMongoDB
DBパフォーマンスチューニングの基礎:インデックス入門
중앙 서버 없는 게임 로직
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
맵매칭 (부정확한 GPS포인트들로부터 경로 추정하기)
[NDC18] 야생의 땅 듀랑고의 데이터 엔지니어링 이야기: 로그 시스템 구축 경험 공유
Addressables で大量のリソース管理・困りどころと解消法
[IGC 2017] 펄어비스 민경인 - Mmorpg를 위한 voxel 기반 네비게이션 라이브러리 개발기
Nmap 9つの真実
Data pipeline with kafka
PostgreSQL:行数推定を読み解く
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
Airflow를 이용한 데이터 Workflow 관리
プロのためのNode-RED再入門
Intro to Neo4j presentation
Learning to Rank for Recommender Systems - ACM RecSys 2013 tutorial
Anzeige

Ähnlich wie Yes zu NoSQL mit MongoDB für .NET-Entwickler (20)

PDF
MongoDB - Riesige Datenmengen schemafrei verwalten
PPTX
CSharp development with MongoDB-CSharp
PDF
Morphia, Spring Data & Co
PDF
mongoDB im Einsatz - Grundlagen
PDF
MongoDB für Java-Programmierer
PDF
MongoDB für Java Programmierer (JUGKA, 11.12.13)
PPTX
Back to Basics – Webinar 2: Ihre erste MongoDB-Anwendung
PPTX
Das Back to Basics – Webinar 1: Einführung in NoSQL
PPTX
Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017
PPTX
MongoDB Munich 2012: Spring Data MongoDB
PPTX
OOP 2013: Praktische Einführung in MongoDB
PPTX
Back to Basics German 2: Erstellen Sie Ihre erste Anwendung in MongoDB
PPT
Back to Basics – Webinar 4: Fortschrittliche Indizierung, Text- und Geoindizes
PDF
Zend Framework 2 feat. MongoDB
PPTX
MongoDB Einführung
PPTX
Back to Basics – Webinar 3: Schema-Design: Denken in Dokumenten
PPTX
Back to Basics-Webinar 5: Einführung in das Aggregation-Framework
PPTX
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
PPTX
Data is the new Oil! - Paradigmenwechsel im Arbeiten und Verwalten von Daten
MongoDB - Riesige Datenmengen schemafrei verwalten
CSharp development with MongoDB-CSharp
Morphia, Spring Data & Co
mongoDB im Einsatz - Grundlagen
MongoDB für Java-Programmierer
MongoDB für Java Programmierer (JUGKA, 11.12.13)
Back to Basics – Webinar 2: Ihre erste MongoDB-Anwendung
Das Back to Basics – Webinar 1: Einführung in NoSQL
Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017
MongoDB Munich 2012: Spring Data MongoDB
OOP 2013: Praktische Einführung in MongoDB
Back to Basics German 2: Erstellen Sie Ihre erste Anwendung in MongoDB
Back to Basics – Webinar 4: Fortschrittliche Indizierung, Text- und Geoindizes
Zend Framework 2 feat. MongoDB
MongoDB Einführung
Back to Basics – Webinar 3: Schema-Design: Denken in Dokumenten
Back to Basics-Webinar 5: Einführung in das Aggregation-Framework
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
Data is the new Oil! - Paradigmenwechsel im Arbeiten und Verwalten von Daten
Anzeige

Mehr von Gregor Biswanger (13)

PDF
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
PDF
Einführung in Clean Code mit .NET - Teil 1
PDF
MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
PDF
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
PDF
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
PDF
MongoDB: Security-Tipps gegen Hacker
PPTX
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
PPTX
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
PPTX
Roadshow: Einstieg in die Hybrid-App Entwicklung mit dem Intel XDK und Apache...
PPTX
Clevere Tipps zum Thema Facebook Posts
PDF
Responsive Webdesign mit Bootstrap
PDF
Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...
PPT
Multi Touch.Prio.Conference 2009
Hands-on Workshop: API-Dokumentation mit OpenAPI / Swagger in ASP.NET Core
Einführung in Clean Code mit .NET - Teil 1
MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
MongoDB: Security-Tipps gegen Hacker
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Aber schnell! Top HTML5 Performance Tipps für Hybrid- und Web-Apps
Roadshow: Einstieg in die Hybrid-App Entwicklung mit dem Intel XDK und Apache...
Clevere Tipps zum Thema Facebook Posts
Responsive Webdesign mit Bootstrap
Intel XDK: Cross-Plattform Entwicklung – Apps Entwickeln für alle Plattformen...
Multi Touch.Prio.Conference 2009

Yes zu NoSQL mit MongoDB für .NET-Entwickler