Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

1,043 views

Published on

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.

Published in: Technology
  • Be the first to comment

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

  1. 1. Yes zu NoSQL mit MongoDB Für .NET-Entwickler Gregor Biswanger | Freier Berater, Trainer, Autor und Sprecher about.me/gregor.biswanger
  2. 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. 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
  4. 4. Einstieg in MongoDB mit C# Die ersten Schritte
  5. 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. 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
  7. 7. Installation über den Paketmanager (Linux, Ubuntu) 1. Paketmanager Katalog updaten: sudo apt-get update 2. MongoDB Paket installieren: sudo apt-get install –y mongodb
  8. 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. 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. 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
  11. 11. Aufbau der MongoDB Datenstruktur database tables rows columns database collections documents (BSON) fields SQL Terms / Konzepte MongoDB Terms / Konzepte
  12. 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. 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. 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
  15. 15. Dokumentation http://mongodb.github.io/mongo-csharp-driver/
  16. 16. Verbindung aufbauen Die ersten Schritte
  17. 17. Ein neues Projekt anlegen
  18. 18. Den Mongo C# Treiber über NuGet installieren
  19. 19. Eine Klasse hinzufügen
  20. 20. Ermöglicht den Zugriff auf die Datenbank und die Collections
  21. 21. Dokumente erzeugen Von POCO zu BSON
  22. 22. Dokument-Serialisierung Client Server BSON POCO BSON Dokument JSON
  23. 23. Eine Klasse hinzufügen
  24. 24. Datenklasse mit Metainformationen
  25. 25. Speichern und Verändern Die Fütterungszeit für Mongo
  26. 26. Ermöglicht den Zugriff auf die Datenbank und die Collections
  27. 27. Eine Klasse hinzufügen
  28. 28. DTO für das Formular
  29. 29. Eine Razor Page hinzufügen
  30. 30. Die Code-Behind-Datei von der Razor-Page
  31. 31. Die View von der Razor-Page
  32. 32. Das Formular für ein neues Mietobjekt
  33. 33. Die Daten in der Datenbank
  34. 34. Eine Razor Page hinzufügen
  35. 35. Eine Übersicht aller Mietobjekte
  36. 36. Eine Klasse hinzufügen
  37. 37. Entity für die Preisänderung
  38. 38. Eine Klasse hinzufügen
  39. 39. DTO für das Formular
  40. 40. Eine Razor Page hinzufügen
  41. 41. { "$set": { "Age": 54 } } Native Mongo QueryMongo C# Driver
  42. 42. { "$push": { "Adjustments": [{ "OldPrice": 100.0, "NewPrice": 200.0, "Reason": "…" }] }, "$set": { "Price": 200.0 } } Native Mongo QueryMongo C# Driver
  43. 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)
  44. 44. Abfragen Haste mal nen Datensatz?
  45. 45. GridFS Mit Binären-Datensätzen arbeiten
  46. 46. Eine Razor Page hinzufügen
  47. 47. LINQ Denken in LINQ!
  48. 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/
  49. 49. 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
  50. 50. Fluent Aggregation API Native Kommandos, ganz einfach!
  51. 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
  52. 52. 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
  53. 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
  54. 54. CRUD Das ABC für die Datenverarbeitung
  55. 55. Create
  56. 56. Read
  57. 57. Update
  58. 58. Delete
  59. 59. Eventing Reagieren auf Ereignisse
  60. 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. 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
  62. 62. Joins Daten zusammenführen
  63. 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
  64. 64. Client-Seitiger Join
  65. 65. Server-Seitiger Join
  66. 66. http://about.me/Gregor.Biswanger Ich freue mich auf Feedback! Vielen Dank!

×