Persistenz-Frameworks in verschiedenen Programmiersprachen von Amir Chehade, Malik Dirim und Luisa John
Inhalt 1. 2. 3. 4. Fragestellung Rückblick: Java a. MySQL b. Hibernate PHP a. Laravel Ruby a....on Rails b. Persistenz 5. 6. 7. Python a. PostgreSQL b. Django Javascript c. MongoDB d. NodeJS e. Mongoose Amazon Web Services f. DynamoDB g. Object Persistence Model 2/73
Ziel / Fragestellung Wie setzen Frameworks in verschiedenen Programmiersprachen das Object Relational Mapping, bzw. das Persistieren von Objektdaten um? 3/73
Java
Java 1995 entwickelt von James Gosling https://de.wikipedia.org/wiki/java_(programmiersprache) 5/73
Java 1995 entwickelt von James Gosling Objekt - Orientiert https://de.wikipedia.org/wiki/java_(programmiersprache) 5/73
Java 1995 entwickelt von James Gosling Objekt - Orientiert Typisierung: stark, statisch https://de.wikipedia.org/wiki/java_(programmiersprache) 5/73
Java 1995 entwickelt von James Gosling Objekt - Orientiert Typisierung: stark, statisch Besonderheit: JVM https://de.wikipedia.org/wiki/java_(programmiersprache) 5/73
Java MySQL
MySQL Relational https://www.mysql.com/de/ https://de.wikipedia.org/wiki/mysql https://logos-download.com/5684-mysql-logo-download.html 7/73
MySQL Relational Strikte Schema https://www.mysql.com/de/ https://de.wikipedia.org/wiki/mysql 7/73
MySQL Relational Strikte Schema Table, Row, Column https://www.mysql.com/de/ https://de.wikipedia.org/wiki/mysql 7/73
MySQL Relational Strikte Schema Table, Row, Column Vorteile: Datenmenge, Performance, Sicherheit https://www.mysql.com/de/ https://de.wikipedia.org/wiki/mysql 7/73
MySQL Relational Strikte Schema Table, Row, Column Vorteile: Datenmenge, Performance, Sicherheit Nachteile: Nicht SQL konform, Lizenz https://www.mysql.com/de/ https://de.wikipedia.org/wiki/mysql 7/73
MySQL Relational Strikte Schema Table, Row, Column Vorteile: Datenmenge, Performance, Sicherheit Nachteile: Nicht SQL konform, Lizenz Beispiele: NASA, Facebook, Twitter https://www.mysql.com/de/ https://de.wikipedia.org/wiki/mysql 7/73
Java Hibernate/JPA
Hibernate Form und Relation mittels Annotation Entity: Persistenz-Objekt Entity Manager: Verwaltung von Persistenz-Objekten 9/73
Java Hibernate/JPA: Beispiel
Hibernate: Beispiel... 11/73
PHP
PHP PHP = Hypertext Preprocessor (ursprünglich: Personal Home Page Tools) https://en.wikipedia.org/wiki/php https://twitter.com/rasmus 13/73
PHP PHP = Hypertext Preprocessor 1995 entwickelt von Rasmus Lerdorf https://en.wikipedia.org/wiki/php https://twitter.com/rasmus 13/73
PHP PHP = Hypertext Preprocessor 1995 entwickelt von Rasmus Lerdorf Schwach und dynamisch typisiert, meist objektorientiert verwendet https://en.wikipedia.org/wiki/php https://twitter.com/rasmus 13/73
PHP PHP = Hypertext Preprocessor 1995 entwickelt von Rasmus Lerdorf Schwach und dynamisch typisiert, meist objektorientiert verwendet Open Source https://en.wikipedia.org/wiki/php https://twitter.com/rasmus 13/73
PHP PHP = Hypertext Preprocessor 1995 entwickelt von Rasmus Lerdorf Schwach und dynamisch typisiert, meist objektorientiert verwendet Open Source Heutzutage auf fast jedem Server vorinstalliert https://en.wikipedia.org/wiki/php https://twitter.com/rasmus 13/73
PHP Laravel
Laravel Derzeit beliebtestes PHP-Framework https://en.wikipedia.org/wiki/laravel https://laravel.com/ http://www.fullstackradio.com 15/73
Laravel Derzeit beliebtestes PHP-Framework 2011 initiiert von Taylor Otwell https://en.wikipedia.org/wiki/laravel https://laravel.com/ http://www.fullstackradio.com 15/73
Laravel Derzeit beliebtestes PHP-Framework 2011 initiiert von Taylor Otwell MVC, großes Ökosystem, ganz viel Magic https://en.wikipedia.org/wiki/laravel https://laravel.com/ http://www.fullstackradio.com 15/73
Laravel Derzeit beliebtestes PHP-Framework 2011 initiiert von Taylor Otwell MVC, großes Ökosystem, ganz viel Magic Open Source https://en.wikipedia.org/wiki/laravel https://laravel.com/ http://www.fullstackradio.com 15/73
Laravel Derzeit beliebtestes PHP-Framework 2011 initiiert von Taylor Otwell MVC, großes Ökosystem, ganz viel Magic Open Source Vom PHP-Framework Symfony abgeleitet https://en.wikipedia.org/wiki/laravel https://laravel.com/ http://www.fullstackradio.com 15/73
Laravel Persistenz
Laravel Persistenz Erlaubt rohes SQL, einen Query-Builder oder das Laravel Eloquent ORM https://medium.com/@shakyshane/laravel-docker-part-1-setup-for-development-e3daaefaf3c https://laravel.com/docs/5.7 17/73
Laravel Persistenz Erlaubt rohes SQL, einen Query-Builder oder das Laravel Eloquent ORM Unterstützt klassische SQL-Datenbanken (MySQL, PostgreSQL, SQLite, etc...) https://medium.com/@shakyshane/laravel-docker-part-1-setup-for-development-e3daaefaf3c https://laravel.com/docs/5.7 17/73
Laravel Persistenz Erlaubt rohes SQL, einen Query-Builder oder das Laravel Eloquent ORM Unterstützt klassische SQL-Datenbanken (MySQL, PostgreSQL, SQLite, etc...) Unterstützt Caching mit memcached und redis https://medium.com/@shakyshane/laravel-docker-part-1-setup-for-development-e3daaefaf3c https://laravel.com/docs/5.7 17/73
Laravel Persistenz Beispiele
Laravel Beispiel Mit ein bisschen Magic generieren wir uns eine fertige BenutzerAuthentifizierung: https://laravel.com/docs/5.7 19/73
Laravel Beispiel Startseite: https://laravel.com/docs/5.7 20/73
Laravel Beispiel Registrierung: https://laravel.com/docs/5.7 21/73
Laravel Beispiel Login: https://laravel.com/docs/5.7 22/73
Laravel Beispiel Eine Migrations-Datei: php artisan migrate schreibt die Tabelle in die Datenbank. https://laravel.com/docs/5.7 23/73
Laravel Beispiel Eine Factory-Datei: Kann in Seeder-Dateien verwendet werden, um die Datenbank mit festen Werten zu füllen. php artisan db:seed https://laravel.com/docs/5.7 24/73
Laravel Beispiel Eine Model-Datei: Hier werden wir gleich noch Beziehungen konfigurieren. https://laravel.com/docs/5.7 25/73
Laravel Beispiel Einige Beispiel-Queries über das Eloquent ORM: $users = App\User::all(); https://laravel.com/docs/5.7 26/73
Laravel Beispiel Einige Beispiel-Queries über das Eloquent ORM: $users = App\User::all(); $users = App\User::where('active', 1) ->orderby('name', 'desc') ->take(10) ->get(); https://laravel.com/docs/5.7 26/73
Laravel Beispiel Einige Beispiel-Queries über das Eloquent ORM: $user = App\User::where('active', 1)->first(); https://laravel.com/docs/5.7 26/73
Laravel Beispiel Einige Beispiel-Queries über das Eloquent ORM: $user = App\User::where('active', 1)->first(); $user = new User; $user>name = 'David Dude'; $user>save(); https://laravel.com/docs/5.7 26/73
Laravel Beispiel Einige Beispiel-Queries über das Eloquent ORM: $user = App\User::where('active', 1)->first(); $user = new User; $user>name = 'David Dude'; $user>save(); $user = App\User::firstOrCreate(['name' => 'David Dude']) https://laravel.com/docs/5.7 26/73
Laravel Beispiel Wir generieren ein neues Model Lesson. Ein User soll mehrere Lessons haben. https://laravel.com/docs/5.7 27/73
Laravel Beispiel Laravel Doku zu Model-Beziehungen: (Ausschnitt) https://laravel.com/docs/5.7 28/73
Laravel Beispiel Definition der Beziehung User -> Lesson: https://laravel.com/docs/5.7 29/73
Laravel Beispiel Definition der Beziehung Lesson -> User: https://laravel.com/docs/5.7 30/73
Laravel Beispiel Jetzt sind Queries über Beziehungen möglich nach Schema: $lessons = App\User::find(1)->lessons; $lessons = App\User::find(1)->lessons()->where('title', 'foo')->first(); $lessons = App\User::find(1)->lessons()->orderBy('name')->get(); https://laravel.com/docs/5.7 31/73
Ruby
Ruby Rubys eigentliches Ziel ist es zu erfreuen Sprachdesigner, Anwender, Sprachlerner, jeden https://en.wikipedia.org/wiki/ruby_(programming_language) https://www.ruby-lang.org/de/ https://en.wikipedia.org/wiki/yukihiro_matsumoto 33/73
Ruby Rubys eigentliches Ziel ist es zu erfreuen Sprachdesigner, Anwender, Sprachlerner, jeden 1995 entwickelt von Yukihiro Matsumoto https://en.wikipedia.org/wiki/ruby_(programming_language) https://www.ruby-lang.org/de/ https://en.wikipedia.org/wiki/yukihiro_matsumoto 33/73
Ruby Rubys eigentliches Ziel ist es zu erfreuen Sprachdesigner, Anwender, Sprachlerner, jeden 1995 entwickelt von Yukihiro Matsumoto Stark und dynamisch typisiert, objektorientiert https://en.wikipedia.org/wiki/ruby_(programming_language) https://www.ruby-lang.org/de/ https://en.wikipedia.org/wiki/yukihiro_matsumoto 33/73
Ruby Rubys eigentliches Ziel ist es zu erfreuen Sprachdesigner, Anwender, Sprachlerner, jeden 1995 entwickelt von Yukihiro Matsumoto Stark und dynamisch typisiert, objektorientiert Open Source https://en.wikipedia.org/wiki/ruby_(programming_language) https://www.ruby-lang.org/de/ https://en.wikipedia.org/wiki/yukihiro_matsumoto 33/73
Ruby Rubys eigentliches Ziel ist es zu erfreuen Sprachdesigner, Anwender, Sprachlerner, jeden 1995 entwickelt von Yukihiro Matsumoto Stark und dynamisch typisiert, objektorientiert Open Source GitHub, Airbnb, etc. https://en.wikipedia.org/wiki/ruby_(programming_language) https://www.ruby-lang.org/de/ https://en.wikipedia.org/wiki/yukihiro_matsumoto 33/73
Ruby... on Rails
Ruby on Rails Inspiration für die meisten anderen Web-Frameworks anderer Sprachen https://en.wikipedia.org/wiki/ruby_on_rails https://rubyonrails.org/ https://en.wikipedia.org/wiki/david_heinemeier_hansson 35/73
Ruby on Rails Inspiration für die meisten anderen Web-Frameworks anderer Sprachen 2005 entwickelt von David Heinemeier Hansson https://en.wikipedia.org/wiki/ruby_on_rails https://rubyonrails.org/ https://en.wikipedia.org/wiki/david_heinemeier_hansson 35/73
Ruby on Rails Inspiration für die meisten anderen Web-Frameworks anderer Sprachen 2005 entwickelt von David Heinemeier Hansson MVC-Architektur https://en.wikipedia.org/wiki/ruby_on_rails https://rubyonrails.org/ https://en.wikipedia.org/wiki/david_heinemeier_hansson 35/73
Ruby on Rails Inspiration für die meisten anderen Web-Frameworks anderer Sprachen 2005 entwickelt von David Heinemeier Hansson MVC-Architektur Open Source https://en.wikipedia.org/wiki/ruby_on_rails https://rubyonrails.org/ https://en.wikipedia.org/wiki/david_heinemeier_hansson 35/73
Ruby on Rails Inspiration für die meisten anderen Web-Frameworks anderer Sprachen 2005 entwickelt von David Heinemeier Hansson MVC-Architektur Open Source Setzt stark auf Konventionen und Standards https://en.wikipedia.org/wiki/ruby_on_rails https://rubyonrails.org/ https://en.wikipedia.org/wiki/david_heinemeier_hansson 35/73
Ruby on Rails Persistenz
Ruby on Rails Persistenz Hat Adapter für SQL-Datenbanken (MySQL, PostgreSQL, SQLite, etc...) https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto https://medium.com/firehydrant-io/developing-a-ruby-on-rails-app-with-docker-compose-d75b20334634 37/73
Ruby on Rails Persistenz Hat Adapter für SQL-Datenbanken (MySQL, PostgreSQL, SQLite, etc...) Verwendet das Active Record Pattern (ein Object Relational Mapping - System) https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto 37/73
Ruby on Rails Persistenz Hat Adapter für SQL-Datenbanken (MySQL, PostgreSQL, SQLite, etc...) Verwendet das Active Record Pattern (ein Object Relational Mapping - System) Repräsentiert Models (Objekte), ihre Daten, ihre Beziehungen und Hierarchien https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto https://medium.com/firehydrant-io/developing-a-ruby-on-rails-app-with-docker-compose-d75b20334634 37/73
Ruby on Rails Persistenz Hat Adapter für SQL-Datenbanken (MySQL, PostgreSQL, SQLite, etc...) Verwendet das Active Record Pattern (ein Object Relational Mapping - System) Repräsentiert Models (Objekte), ihre Daten, ihre Beziehungen und Hierarchien Erlaubt OO-Datenbank-Operationen und Validierung https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto https://medium.com/firehydrant-io/developing-a-ruby-on-rails-app-with-docker-compose-d75b20334634 37/73
Ruby on Rails Persistenz Beispiele
Ruby on Rails Beispiel Generieren eines neuen Models Post (Blog-Post o.ä.) https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto https://medium.com/firehydrant-io/developing-a-ruby-on-rails-app-with-docker-compose-d75b20334634 39/73
Ruby on Rails Beispiel Erstellte Datei: Model https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto https://medium.com/firehydrant-io/developing-a-ruby-on-rails-app-with-docker-compose-d75b20334634 40/73
Ruby on Rails Beispiel Erstellte Datei: Migration https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto https://medium.com/firehydrant-io/developing-a-ruby-on-rails-app-with-docker-compose-d75b20334634 41/73
Ruby on Rails Beispiel Auf Basis der Migration kann eine DB-Tabelle erzeugt werden: $docker-compose run --rm web rails db:migrate https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto https://medium.com/firehydrant-io/developing-a-ruby-on-rails-app-with-docker-compose-d75b20334634 42/73
Ruby on Rails Beispiel Erweiterte Datei: Schema https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto https://medium.com/firehydrant-io/developing-a-ruby-on-rails-app-with-docker-compose-d75b20334634 43/73
Ruby on Rails Beispiel CRUD-Logik ist nun abstrahiert. Create-Beispiel: post = Post.create(title: My Title, body: Tells a story ) oder post= Post.new post.title = My Title post.body = Tells a story https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto https://medium.com/firehydrant-io/developing-a-ruby-on-rails-app-with-docker-compose-d75b20334634 44/73
Ruby on Rails Beispiel CRUD-Logik ist nun abstrahiert. Get-All-Beispiel: posts = Post.all https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto https://medium.com/firehydrant-io/developing-a-ruby-on-rails-app-with-docker-compose-d75b20334634 45/73
Ruby on Rails Beispiel CRUD-Logik ist nun abstrahiert. Get-One-Beispiel: post = Post.find_by(title: My Title ) https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto https://medium.com/firehydrant-io/developing-a-ruby-on-rails-app-with-docker-compose-d75b20334634 46/73
Ruby on Rails Beispiel Wir erstellen ein neues Model mit einer Beziehung: $... g(enerate) resource comment post:references body:text https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto https://medium.com/firehydrant-io/developing-a-ruby-on-rails-app-with-docker-compose-d75b20334634 47/73
Ruby on Rails Beispiel Erstellte Datei: Model https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto https://medium.com/firehydrant-io/developing-a-ruby-on-rails-app-with-docker-compose-d75b20334634 48/73
Ruby on Rails Beispiel Erstellte Datei: Migration https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto https://medium.com/firehydrant-io/developing-a-ruby-on-rails-app-with-docker-compose-d75b20334634 49/73
Ruby on Rails Beispiel Update von Post, um die Beziehung zu reflektieren: https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto https://medium.com/firehydrant-io/developing-a-ruby-on-rails-app-with-docker-compose-d75b20334634 50/73
Ruby on Rails Beispiel Jetzt sind Abfragen über Beziehungen möglich, z.b.: comments = Post.find_by(title: My Title ).comments https://guides.rubyonrails.org/active_record_basics.html https://www.youtube.com/watch?v=oadhy_y8wto https://medium.com/firehydrant-io/developing-a-ruby-on-rails-app-with-docker-compose-d75b20334634 51/73
Python
Python Universelle Programmiersprache https://en.wikipedia.org/wiki/python_(programming_language) https://en.wikipedia.org/wiki/guido_van_rossum 53/73
Python Universelle Programmiersprache 1991 entwickelt von Guido van Rossum https://en.wikipedia.org/wiki/python_(programming_language) https://en.wikipedia.org/wiki/guido_van_rossum 53/73
Python Universelle Programmiersprache 1991 entwickelt von Guido van Rossum Stark und dynamisch typisiert https://en.wikipedia.org/wiki/python_(programming_language) https://en.wikipedia.org/wiki/guido_van_rossum 53/73
Python Universelle Programmiersprache 1991 entwickelt von Guido van Rossum Stark und dynamisch typisiert Open Source https://en.wikipedia.org/wiki/python_(programming_language) https://en.wikipedia.org/wiki/guido_van_rossum 53/73
Python Universelle Programmiersprache 1991 entwickelt von Guido van Rossum Stark und dynamisch typisiert Open Source Extrem flexibel, leicht zu erlernen https://en.wikipedia.org/wiki/python_(programming_language) https://en.wikipedia.org/wiki/guido_van_rossum 53/73
Python PostgreSQL
PostgreSQL Relational https://de.wikipedia.org/wiki/postgresql https://www.postgresql.org/ 55/73
PostgreSQL Relational Open - Source https://de.wikipedia.org/wiki/postgresql https://www.postgresql.org/ 55/73
PostgreSQL Relational Open - Source Vorteile: SQL Konform, programmatisch erweiterbar, Geometrische Datentypen https://de.wikipedia.org/wiki/postgresql https://www.postgresql.org/ 55/73
PostgreSQL Relational Open - Source Vorteile: SQL Konform, programmatisch erweiterbar, Geometrische Datentypen Nachteile: Performance, Popularität https://de.wikipedia.org/wiki/postgresql https://www.postgresql.org/ 55/73
PostgreSQL Relational Open - Source Vorteile: SQL Konform, programmatisch erweiterbar, Geometrische Datentypen Nachteile: Performance, Popularität Beispiele: Netflix, Spotify, Uber, Reddit, Twitch, Instagram https://de.wikipedia.org/wiki/postgresql https://www.postgresql.org/ 55/73
Python Django
Django Neben Flask das beliebteste Framework https://en.wikipedia.org/wiki/django_(web_framework) https://en.wikipedia.org/wiki/adrian_holovaty https://en.wikipedia.org/wiki/simon_willison https://www.djangoproject.com/ 57/73
Django Neben Flask das beliebteste Framework 2005 veröffentlicht von Adrian Holovaty und Simon Willison https://en.wikipedia.org/wiki/django_(web_framework) https://en.wikipedia.org/wiki/adrian_holovaty https://en.wikipedia.org/wiki/simon_willison https://www.djangoproject.com/ 57/73
Django Neben Flask das beliebteste Framework 2005 veröffentlicht von Adrian Holovaty und Simon Willison MVC, großes Ökosystem, ganz viel Magic https://en.wikipedia.org/wiki/django_(web_framework) https://en.wikipedia.org/wiki/adrian_holovaty https://en.wikipedia.org/wiki/simon_willison https://www.djangoproject.com/ 57/73
Django Neben Flask das beliebteste Framework 2005 veröffentlicht von Adrian Holovaty und Simon Willison MVC, großes Ökosystem, ganz viel Magic Open Source https://en.wikipedia.org/wiki/django_(web_framework) https://en.wikipedia.org/wiki/adrian_holovaty https://en.wikipedia.org/wiki/simon_willison https://www.djangoproject.com/ 57/73
Django Neben Flask das beliebteste Framework 2005 veröffentlicht von Adrian Holovaty und Simon Willison MVC, großes Ökosystem, ganz viel Magic Open Source Vom PHP-Framework Symfony abgeleitet https://en.wikipedia.org/wiki/django_(web_framework) https://en.wikipedia.org/wiki/adrian_holovaty https://en.wikipedia.org/wiki/simon_willison https://www.djangoproject.com/ 57/73
Python Django: Beispiele
Django: Beispiel Keine Getter & Setter https://en.wikipedia.org/wiki/django_(web_framework) https://en.wikipedia.org/wiki/adrian_holovaty https://en.wikipedia.org/wiki/simon_willison https://www.djangoproject.com/ 59/73
Django: Beispiel Keine Getter & Setter Filter Annotation https://en.wikipedia.org/wiki/django_(web_framework) https://en.wikipedia.org/wiki/adrian_holovaty https://en.wikipedia.org/wiki/simon_willison https://www.djangoproject.com/ 59/73
Django: Beispiel Keine Getter & Setter Filter Annotation Objekt erhält ein zuvor nicht definiertes Feld https://en.wikipedia.org/wiki/django_(web_framework) https://en.wikipedia.org/wiki/adrian_holovaty https://en.wikipedia.org/wiki/simon_willison https://www.djangoproject.com/ 59/73
JavaScript
JavaScript 1995 von Brendan Eich entwickelt https://de.wikipedia.org/wiki/javascript https://de.wikipedia.org/wiki/brendan_eich 61/73
JavaScript 1995 von Brendan Eich entwickelt multipragmatisch https://de.wikipedia.org/wiki/javascript https://de.wikipedia.org/wiki/brendan_eich 61/73
JavaScript 1995 von Brendan Eich entwickelt multipragmatisch Typisierung: schwach, dynamisch https://de.wikipedia.org/wiki/javascript https://de.wikipedia.org/wiki/brendan_eich 61/73
JavaScript MongoDB
MongoDB Nicht-relational https://de.wikipedia.org/wiki/mongodb https://www.mongodb.com/de https://cacm.acm.org/magazines/2017/5/216320-mongodbs-javascript-fuzzer/abstract 63/73
MongoDB Nicht-relational Collection, Document, Field https://de.wikipedia.org/wiki/mongodb https://www.mongodb.com/de https://cacm.acm.org/magazines/2017/5/216320-mongodbs-javascript-fuzzer/abstract 63/73
MongoDB Nicht-relational Collection, Document, Field Keine Schema https://de.wikipedia.org/wiki/mongodb https://www.mongodb.com/de https://cacm.acm.org/magazines/2017/5/216320-mongodbs-javascript-fuzzer/abstract 63/73
MongoDB Nicht-relational Collection, Document, Field Keine Schema Vorteile: Flexible Datensätze https://de.wikipedia.org/wiki/mongodb https://www.mongodb.com/de https://cacm.acm.org/magazines/2017/5/216320-mongodbs-javascript-fuzzer/abstract 63/73
MongoDB Nicht-relational Collection, Document, Field Keine Schema Vorteile: Flexible Datensätze Nachteile: Komplexe Transaktionen & Relationen https://de.wikipedia.org/wiki/mongodb https://www.mongodb.com/de https://cacm.acm.org/magazines/2017/5/216320-mongodbs-javascript-fuzzer/abstract 63/73
MongoDB Nicht-relational Collection, Document, Field Keine Schema Vorteile: Flexible Datensätze Nachteile: Komplexe Transaktionen & Relationen Beispiele: Bosch, ebay, BuzzFeed https://de.wikipedia.org/wiki/mongodb https://www.mongodb.com/de https://cacm.acm.org/magazines/2017/5/216320-mongodbs-javascript-fuzzer/abstract 63/73
JavaScript NodeJS
NodeJS Framework zur entwicklung von Webanwendung https://nodejs.org/en/about/resources/ https://de.wikipedia.org/wiki/npm_(software) https://de.wikipedia.org/wiki/node.js https://nodejs.org/en/ 65/73
NodeJS Framework zur entwicklung von Webanwendung npm zur Einbindung von Modulen https://nodejs.org/en/about/resources/ https://de.wikipedia.org/wiki/npm_(software) https://de.wikipedia.org/wiki/node.js https://nodejs.org/en/ 65/73
NodeJS Framework zur Entwicklung von Webanwendung npm zur Einbindung von Modulen mongoose für mongodb Flexible Schema Custom Validation Discriminators https://nodejs.org/en/about/resources/ https://de.wikipedia.org/wiki/npm_(software) https://de.wikipedia.org/wiki/node.js https://nodejs.org/en/ 65/73
JavaScript Mongoose: Beispiele
Mongoose: Beispiel Schema & Model statt Klasse https://nodejs.org/en/about/resources/ https://de.wikipedia.org/wiki/npm_(software) https://de.wikipedia.org/wiki/node.js https://nodejs.org/en/ 67/73
Mongoose: Beispiel Schema & Model statt Klasse Referenz auf andere Entität über Id Embedded Documents https://nodejs.org/en/about/resources/ https://de.wikipedia.org/wiki/npm_(software) https://de.wikipedia.org/wiki/node.js https://nodejs.org/en/ 67/73
Mongoose: Beispiel Schema & Model statt Klasse Referenz auf andere Entität über Id Embedded Documents discriminator https://nodejs.org/en/about/resources/ https://de.wikipedia.org/wiki/npm_(software) https://de.wikipedia.org/wiki/node.js https://nodejs.org/en/ 67/73
Mongoose: Beispiel Schema & Model statt Klasse Referenz auf andere Entität über Id Embedded Documents discriminator https://nodejs.org/en/about/resources/ https://de.wikipedia.org/wiki/npm_(software) https://de.wikipedia.org/wiki/node.js https://nodejs.org/en/ 67/73
Mongoose: Beispiel Schema & Model statt Klasse Referenz auf andere Entität über Id Embedded Documents discriminator Striktheit wird selbst bestimmt https://nodejs.org/en/about/resources/ https://de.wikipedia.org/wiki/npm_(software) https://de.wikipedia.org/wiki/node.js https://nodejs.org/en/ 67/73
Amazon Web Services seit 2006 in Betrieb https://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/ AWS_Simple_Icons_AWS_Cloud.svg/ 2000px-AWS_Simple_Icons_AWS_Cloud.svg.png https://aws.amazon.com/de/about-aws/ 69/73
Amazon Web Services seit 2006 in Betrieb bietet IT-Infrastrukturservices ( Cloud Computing ) an https://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/ AWS_Simple_Icons_AWS_Cloud.svg/ 2000px-AWS_Simple_Icons_AWS_Cloud.svg.png https://aws.amazon.com/de/about-aws/ 69/73
Amazon Web Services seit 2006 in Betrieb bietet IT-Infrastrukturservices ( Cloud Computing ) an 3 Arten von Cloud Computing Infrastructure as a Service (IaaS) Platform as a Service (PaaS) Software as a Service (SaaS) https://aws.amazon.com/de/about-aws/ https://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/ AWS_Simple_Icons_AWS_Cloud.svg/2000px-AWS_Simple_Icons_AWS_Cloud.svg.png 69/73
Amazon Web Services seit 2006 in Betrieb bietet IT-Infrastrukturservices ( Cloud Computing ) an 3 Arten von CC Infrastructure as a Service (IaaS) Platform as a Service (PaaS) Software as a Service (SaaS) genutzt u.a. von Airbnb, Samsung und Toyota 69/73
DynamoDB ein NoSQL-Datenbankservice, und damit nicht-relational https://cdn.markomedia.com.au/wp-content/ uploads/2015/03/dynamodb.svg_.png https://aws.amazon.com/de/nosql/?nc1=f_cc 71/73
DynamoDB ein NoSQL-Datenbankservice, und damit nicht-relational benutzt Schlüssel-Wertmodell und Dokumentmodell (JSON) https://cdn.markomedia.com.au/wp-content/ uploads/2015/03/dynamodb.svg_.png https://aws.amazon.com/de/nosql/?nc1=f_cc 71/73
DynamoDB ein NoSQL-Datenbankservice, und damit nicht-relational benutzt Schlüssel-Wertmodell und Dokumentmodell (JSON) Vorteil: flexibel, skalierbar https://cdn.markomedia.com.au/wp-content/ uploads/2015/03/dynamodb.svg_.png https://aws.amazon.com/de/nosql/?nc1=f_cc 71/73
DynamoDB ein NoSQL-Datenbankservice, und damit nicht-relational benutzt Schlüssel-Wertmodell und Dokumentmodell (JSON) Vorteil: flexibel, skalierbar Nachteil: Amazon rechnet pro Anfrage ab https://cdn.markomedia.com.au/wp-content/ uploads/2015/03/dynamodb.svg_.png https://aws.amazon.com/de/nosql/?nc1=f_cc 71/73
DynamoDB ein NoSQL-Datenbankservice, und damit nicht-relational benutzt Schlüssel-Wertmodell und Dokumentmodell (JSON) Vorteil: flexibel, skalierbar Nachteil: ACID-Eigenschaften Zugriff über Konsole, Interface oder API https://cdn.markomedia.com.au/ wp-content/uploads/2015/03/dynamodb.svg_.png https://aws.amazon.com/de/nosql/?nc1=f_cc 71/73
aws Objektpersistenzmodell
Objektpersistenzschnittstelle ein High-Level Interface für Java und.net Anwendungen ordnet clientseitigen Klassen DynamoDB-Tabellen zu DynamoDBContext-Klasse ermöglicht Verbindung zu DB für CRUD-Operationen und Abfragen (Queries) Nachteil: das funktioniert nur auf bestehenden Tabellen; zum Erstellen, Bearbeiten und Löschen von Tabellen braucht man ein weiteres Framework https://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/programming.sdkoverview.html https://docs.aws.amazon.com/de_de/amazondynamodb/latest/developerguide/dotnetsdkhighlevel.html 73/73
Vielen Dank für eure Aufmerksamkeit