﻿1
00:00:01,090 --> 00:00:03,210
‫Kursleiter: Genau wie in den vorherigen

2
00:00:03,210 --> 00:00:05,810
‫Abschnitten sollten wir, bevor wir uns mit einer

3
00:00:05,810 --> 00:00:08,590
‫neuen Technologie befassen, erst einmal lernen, worum es geht.

4
00:00:08,590 --> 00:00:12,180
‫Lassen Sie uns in diesem Fall also lernen, was MongoDB

5
00:00:12,180 --> 00:00:14,750
‫eigentlich ist, wie es funktioniert und einen

6
00:00:14,750 --> 00:00:18,600
‫kurzen Überblick darüber gibt, wie es im Vergleich zu traditionelleren Datenbanken abschneidet.

7
00:00:18,600 --> 00:00:21,340
‫Und beginnen wir mit einer einfachen Übersicht.

8
00:00:21,340 --> 00:00:24,830
‫MongoDB ist also offensichtlich eine Datenbank,

9
00:00:24,830 --> 00:00:27,870
‫und zwar eine sogenannte NoSQL-Datenbank.

10
00:00:27,870 --> 00:00:30,930
‫Manche Leute sagen jetzt auch No S Q L,

11
00:00:30,930 --> 00:00:34,240
‫aber ich werde einfach weiterhin "keine Fortsetzung" sagen, in Ordnung?

12
00:00:34,240 --> 00:00:37,010
‫Die andere Art von Datenbank,

13
00:00:37,010 --> 00:00:40,620
‫die etwas traditioneller ist, ist die relationale Datenbank,

14
00:00:40,620 --> 00:00:43,760
‫mit der NoSQL oft verglichen wird.

15
00:00:43,760 --> 00:00:48,330
‫Wie auch immer, in Mongo, was wir anstelle von MongoDB auch

16
00:00:48,330 --> 00:00:52,570
‫sagen können, kann jede Datenbank eine oder mehrere Sammlungen enthalten.

17
00:00:52,570 --> 00:00:55,100
‫Wenn Sie also tatsächlich

18
00:00:55,100 --> 00:00:58,530
‫von einem dieser eher traditionellen relationalen Datenbanksysteme

19
00:00:58,530 --> 00:01:02,760
‫stammen, können Sie sich eine Sammlung als Datentabelle vorstellen.

20
00:01:02,760 --> 00:01:05,520
‫Dann kann jede Sammlung eine oder

21
00:01:05,520 --> 00:01:09,130
‫mehrere Datenstrukturen enthalten, die als Dokumente bezeichnet werden, und

22
00:01:09,130 --> 00:01:11,870
‫in einer relationalen Datenbank wäre

23
00:01:11,870 --> 00:01:15,380
‫ein Dokument wiederum eine Zeile in einer Tabelle.

24
00:01:15,380 --> 00:01:17,770
‫Jedes Dokument enthält also die Daten

25
00:01:17,770 --> 00:01:20,600
‫über eine einzelne Entität, zum Beispiel

26
00:01:20,600 --> 00:01:24,870
‫einen Blogbeitrag oder einen Benutzer oder eine Rezension oder

27
00:01:24,870 --> 00:01:26,780
‫wirklich etwas anderes.

28
00:01:26,780 --> 00:01:29,030
‫Du verstehst den Punkt, oder?

29
00:01:29,030 --> 00:01:32,270
‫Jetzt ist die Sammlung wie die übergeordnete Struktur,

30
00:01:32,270 --> 00:01:34,730
‫die all diese Entitäten enthält.

31
00:01:34,730 --> 00:01:38,120
‫Zum Beispiel eine Blogsammlung für

32
00:01:38,120 --> 00:01:41,730
‫alle Beiträge, eine Benutzersammlung oder eine Rezensionssammlung.

33
00:01:41,730 --> 00:01:44,060
‫Und Sie können hier auch sehen,

34
00:01:44,060 --> 00:01:47,740
‫dass das Dokument ein Datenformat hat, das JSON sehr ähnlich

35
00:01:47,740 --> 00:01:49,810
‫ist, was uns die Arbeit

36
00:01:49,810 --> 00:01:52,520
‫beim Umgang mit diesen Dokumenten erheblich erleichtern wird.

37
00:01:52,520 --> 00:01:55,180
‫Und natürlich werden wir später noch viel darüber sprechen,

38
00:01:55,180 --> 00:01:58,543
‫aber lassen Sie uns zunächst etwas über die Hauptfunktionen von Mongo erfahren.

39
00:01:59,460 --> 00:02:02,260
‫Laut der MongoDB-Website ist MongoDB

40
00:02:02,260 --> 00:02:05,990
‫also eine Dokumentendatenbank mit der gewünschten

41
00:02:05,990 --> 00:02:08,330
‫Skalierbarkeit und Flexibilität

42
00:02:08,330 --> 00:02:12,200
‫sowie mit der erforderlichen Abfrage und Indexierung.

43
00:02:12,200 --> 00:02:14,710
‫Das klingt jetzt etwas übertrieben, also

44
00:02:14,710 --> 00:02:17,503
‫versuchen wir zu verstehen, was das eigentlich bedeutet.

45
00:02:18,490 --> 00:02:23,250
‫Wie wir bereits gesehen haben, ist MongoDB eine dokumentbasierte Datenbank,

46
00:02:23,250 --> 00:02:25,750
‫die Daten in Dokumenten

47
00:02:25,750 --> 00:02:29,660
‫speichert, die aus Feld-Wert-gepaarten Datenstrukturen wie JSON bestehen.

48
00:02:29,660 --> 00:02:33,020
‫Auch hier werden Daten in diesem Dokument anstelle von

49
00:02:33,020 --> 00:02:34,840
‫Zeilen in einer Tabelle

50
00:02:34,840 --> 00:02:37,530
‫gespeichert, wie in traditionellen relationalen Datenbanken.

51
00:02:37,530 --> 00:02:39,930
‫Es handelt sich also um eine NoSQL-Datenbank

52
00:02:39,930 --> 00:02:42,190
‫und nicht um eine relationale.

53
00:02:42,190 --> 00:02:45,690
‫Außerdem verfügt MongoDB über eine integrierte Skalierbarkeit, die

54
00:02:45,690 --> 00:02:48,360
‫es sehr einfach macht, Daten auf

55
00:02:48,360 --> 00:02:50,920
‫mehrere Computer zu verteilen, wenn Ihre

56
00:02:50,920 --> 00:02:52,620
‫Apps immer mehr

57
00:02:52,620 --> 00:02:56,090
‫Benutzer bekommen und eine Menge Daten generiert werden.

58
00:02:56,090 --> 00:02:59,710
‫Was auch immer Sie tun, MongoDB wird es Ihnen sehr leicht

59
00:02:59,710 --> 00:03:01,110
‫machen, zu wachsen.

60
00:03:01,110 --> 00:03:04,010
‫Als nächstes ist ein weiteres großes Merkmal

61
00:03:04,010 --> 00:03:06,360
‫von MongoDB seine große Flexibilität.

62
00:03:06,360 --> 00:03:10,210
‫Es ist also nicht erforderlich, ein Dokumentdatenschema zu definieren, bevor es

63
00:03:10,210 --> 00:03:12,210
‫mit Daten gefüllt wird, was

64
00:03:12,210 --> 00:03:15,460
‫bedeutet, dass jedes Dokument eine andere Anzahl und Art

65
00:03:15,460 --> 00:03:17,160
‫von Feldern haben kann.

66
00:03:17,160 --> 00:03:20,120
‫Und wir können diese Felder auch ständig ändern.

67
00:03:20,120 --> 00:03:22,130
‫Und all dies entspricht

68
00:03:22,130 --> 00:03:24,460
‫wirklich einigen realen Geschäftssituationen und

69
00:03:24,460 --> 00:03:26,690
‫kann daher ziemlich nützlich sein.

70
00:03:26,690 --> 00:03:31,550
‫MongoDB ist auch ein sehr performantes Datenbanksystem.

71
00:03:31,550 --> 00:03:34,680
‫Dank Funktionen wie eingebetteten Datenmodellen,

72
00:03:34,680 --> 00:03:37,645
‫Indexierung, Sharding, den bereits

73
00:03:37,645 --> 00:03:41,290
‫erwähnten flexiblen Dokumenten, nativer Duplizierung und

74
00:03:41,290 --> 00:03:43,010
‫vielem mehr.

75
00:03:43,010 --> 00:03:45,850
‫Und Sie müssen das natürlich nicht alles

76
00:03:45,850 --> 00:03:50,320
‫wissen, aber es ist sicher schön zu wissen, dass MongoDB hochperformant ist,

77
00:03:50,320 --> 00:03:52,100
‫wenn wir es brauchen.

78
00:03:52,100 --> 00:03:55,270
‫Abschließend möchte ich nur hinzufügen, dass

79
00:03:55,270 --> 00:03:57,710
‫MongoDB eine kostenlose Open-Source-Datenbank

80
00:03:57,710 --> 00:04:01,350
‫ist, die unter der SSPL-Lizenz veröffentlicht wird.

81
00:04:01,350 --> 00:04:04,700
‫Zusammenfassend können wir also sagen, dass MongoDB

82
00:04:04,700 --> 00:04:06,770
‫ein großartiges Datenbanksystem

83
00:04:06,770 --> 00:04:09,600
‫ist, um viele Arten moderner, skalierbarer

84
00:04:09,600 --> 00:04:11,900
‫und flexibler Webanwendungen zu erstellen.

85
00:04:11,900 --> 00:04:15,450
‫Und tatsächlich ist Mongo wahrscheinlich die am häufigsten verwendete

86
00:04:15,450 --> 00:04:18,250
‫Datenbank ohne JS, und daher passt es

87
00:04:18,250 --> 00:04:20,690
‫perfekt für uns in diesem Kurs.

88
00:04:20,690 --> 00:04:22,970
‫Okay, lassen Sie uns nun

89
00:04:22,970 --> 00:04:25,910
‫etwas tiefer über diese Dokumente sprechen, und

90
00:04:25,910 --> 00:04:28,540
‫wenn wir von Anfang an auf

91
00:04:28,540 --> 00:04:31,330
‫unser Blogpost-Beispiel zurückkommen, könnte dies eine sehr

92
00:04:31,330 --> 00:04:34,140
‫einfache Darstellung eines einzelnen Postdokuments sein, oder?

93
00:04:34,140 --> 00:04:36,720
‫Und jetzt nur zum Vergleich, hier sehen

94
00:04:36,720 --> 00:04:38,930
‫Sie, wie genau dieselben Daten

95
00:04:38,930 --> 00:04:42,250
‫als Zeile in einer relationalen Datenbank wie MySQL

96
00:04:42,250 --> 00:04:45,580
‫oder sogar in einer Excel-Tabelle aussehen könnten, wenn

97
00:04:45,580 --> 00:04:47,640
‫Sie daran gewöhnt sind.

98
00:04:47,640 --> 00:04:49,730
‫Wie ich bereits

99
00:04:49,730 --> 00:04:53,190
‫erwähnt habe, verwendet MongoDB ein JSON-ähnliches

100
00:04:53,190 --> 00:04:56,070
‫Datenformat zur Datenspeicherung namens BSON.

101
00:04:56,070 --> 00:04:58,970
‫Es sieht im Grunde genauso aus

102
00:04:58,970 --> 00:05:01,650
‫wie JSON, ist aber typisiert,

103
00:05:01,650 --> 00:05:05,450
‫was bedeutet, dass alle Werte einen Datentyp wie String,

104
00:05:05,450 --> 00:05:09,050
‫Boolean, Datum und Lehrer, Doppelobjekt oder mehr haben.

105
00:05:09,050 --> 00:05:11,890
‫All das erfahren wir später in der Praxis.

106
00:05:11,890 --> 00:05:15,030
‫Das bedeutet also, dass alle MongoDB-Dokumente

107
00:05:15,030 --> 00:05:16,700
‫tatsächlich typisiert werden,

108
00:05:16,700 --> 00:05:20,220
‫was sich von JSON unterscheidet, in Ordnung?

109
00:05:20,220 --> 00:05:23,830
‫Genau wie JSON haben auch diese BSON-Dokumente

110
00:05:23,830 --> 00:05:26,570
‫Felder und Daten werden in

111
00:05:26,570 --> 00:05:28,270
‫Schlüssel-Wert-Paaren gespeichert.

112
00:05:28,270 --> 00:05:30,840
‫Andererseits wird in einer relationalen

113
00:05:30,840 --> 00:05:33,730
‫Datenbank jedes Feld als Spalte bezeichnet.

114
00:05:33,730 --> 00:05:35,400
‫Hier können Sie

115
00:05:35,400 --> 00:05:38,920
‫also wieder sehen, wie diese Datenbanken Daten in

116
00:05:38,920 --> 00:05:42,590
‫Tabellenstrukturen anordnen, während unsere JSON-Daten so viel flexibler sind.

117
00:05:42,590 --> 00:05:44,300
‫Nehmen wir zum Beispiel

118
00:05:44,300 --> 00:05:46,170
‫das Tag-Feld, wo wir eigentlich ein

119
00:05:46,170 --> 00:05:50,470
‫Array haben, also haben wir im Grunde mehrere Werte für ein Feld, richtig?

120
00:05:50,470 --> 00:05:54,140
‫Also MongoDB, Space und DV in diesem Fall.

121
00:05:54,140 --> 00:05:57,040
‫Aber in relationalen Datenbanken ist das nicht wirklich erlaubt.

122
00:05:57,040 --> 00:06:00,020
‫Wir können nicht mehrere Werte in einem Feld

123
00:06:00,020 --> 00:06:03,100
‫haben und müssten daher tatsächlich Umgehungen dafür finden, was

124
00:06:03,100 --> 00:06:05,150
‫dann mehr Arbeit und insgesamt

125
00:06:05,150 --> 00:06:07,550
‫mehr Komplikation mit sich bringen könnte.

126
00:06:07,550 --> 00:06:10,540
‫Ein weiteres äußerst wichtiges Feature in

127
00:06:10,540 --> 00:06:13,040
‫MongoDB ist das Konzept eingebetteter

128
00:06:13,040 --> 00:06:16,120
‫Dokumente, das wiederum in relationalen Datenbanken

129
00:06:16,120 --> 00:06:18,290
‫nicht vorhanden ist.

130
00:06:18,290 --> 00:06:19,970
‫In unserem Kommentarfeld hier

131
00:06:19,970 --> 00:06:23,050
‫haben wir also ein Array, das drei Objekte enthält.

132
00:06:23,050 --> 00:06:24,500
‫Eine für jedes

133
00:06:24,500 --> 00:06:26,280
‫Dokument, und jedes von ihnen

134
00:06:26,280 --> 00:06:28,700
‫könnte tatsächlich ein eigenes Dokument sein, oder?

135
00:06:28,700 --> 00:06:31,360
‫Stellen Sie sich also vor, wir

136
00:06:31,360 --> 00:06:34,550
‫hätten eine Kommentarsammlung, die eine Reihe von Kommentardokumenten enthält.

137
00:06:34,550 --> 00:06:37,670
‫Jeder von ihnen könnte tatsächlich genau so

138
00:06:37,670 --> 00:06:40,600
‫aussehen, also mit einem Autor und mit

139
00:06:40,600 --> 00:06:42,200
‫dem Kommentartext, aber

140
00:06:42,200 --> 00:06:45,850
‫stattdessen fügen wir diese Kommentare direkt in das

141
00:06:45,850 --> 00:06:49,610
‫Blog-Post-Dokument ein, d. h. wir betten die Kommentardokumente direkt

142
00:06:49,610 --> 00:06:52,270
‫in die ein Dokument posten.

143
00:06:52,270 --> 00:06:55,410
‫Dieser Prozess des Einbettens oder Denormalisierens, wie

144
00:06:55,410 --> 00:06:59,070
‫wir ihn auch nennen können, besteht im Wesentlichen

145
00:06:59,070 --> 00:07:01,930
‫darin, einige verwandte Daten in ein

146
00:07:01,930 --> 00:07:04,040
‫einziges Dokument einzubetten.

147
00:07:04,040 --> 00:07:07,540
‫In diesem Beispiel beziehen sich die Kommentare auf den

148
00:07:07,540 --> 00:07:10,880
‫Beitrag und sind daher im selben Dokument enthalten.

149
00:07:10,880 --> 00:07:13,380
‫Und das macht eine Datenbank in

150
00:07:13,380 --> 00:07:15,760
‫manchen Situationen performanter, weil es so

151
00:07:15,760 --> 00:07:17,340
‫einfacher sein kann,

152
00:07:17,340 --> 00:07:20,150
‫alle benötigten Daten auf einmal zu lesen.

153
00:07:20,150 --> 00:07:23,270
‫Und das ist etwas, worüber wir viel sprechen werden, wenn

154
00:07:23,270 --> 00:07:25,320
‫wir etwas über Datenmodellierung lernen, aber

155
00:07:25,320 --> 00:07:28,720
‫im Moment hoffe ich, dass dies für Sie immer noch Sinn macht.

156
00:07:28,720 --> 00:07:31,850
‫Das Gegenteil von Einbetten oder Denormalisieren ist

157
00:07:31,850 --> 00:07:35,520
‫das Normalisieren, und so werden die Daten immer in

158
00:07:35,520 --> 00:07:37,200
‫relationalen Datenbanken modelliert.

159
00:07:37,200 --> 00:07:40,430
‫In diesem Fall ist es also nicht möglich, Daten einzubetten.

160
00:07:40,430 --> 00:07:42,070
‫Die Lösung besteht also

161
00:07:42,070 --> 00:07:44,480
‫darin, eine ganz neue Tabelle für

162
00:07:44,480 --> 00:07:47,320
‫die Kommentare zu erstellen und die Tabellen dann

163
00:07:47,320 --> 00:07:50,250
‫durch Verweis auf das ID-Feld der Kommentartabelle zu verbinden.

164
00:07:50,250 --> 00:07:52,590
‫Wir werden in diesem Kurs keine relationalen

165
00:07:52,590 --> 00:07:55,460
‫Datenbanken verwenden, aber ich glaube, es ist trotzdem wichtig,

166
00:07:55,460 --> 00:07:57,510
‫die Unterschiede zu kennen, wenn

167
00:07:57,510 --> 00:07:59,630
‫Sie ein guter Back-End-Entwickler werden wollen.

168
00:07:59,630 --> 00:08:01,940
‫Wie auch immer, und jetzt

169
00:08:01,940 --> 00:08:04,810
‫zum Abschluss noch zwei Dinge zu BSON-Dokumenten.

170
00:08:04,810 --> 00:08:07,510
‫Erstens beträgt die maximale Größe für jedes

171
00:08:07,510 --> 00:08:12,120
‫Dokument derzeit 16 MB, die sich jedoch in Zukunft möglicherweise erhöhen wird.

172
00:08:12,120 --> 00:08:16,180
‫Und zweitens enthält jedes Dokument eine eindeutige ID,

173
00:08:16,180 --> 00:08:19,900
‫die als Primärschlüssel dieses Dokuments fungiert.

174
00:08:19,900 --> 00:08:23,780
‫Es wird jedes Mal automatisch mit dem Objekt-ID-Datentyp generiert, wenn

175
00:08:23,780 --> 00:08:26,000
‫es ein neues Dokument gibt,

176
00:08:26,000 --> 00:08:28,605
‫sodass wir uns nicht darum kümmern müssen.

177
00:08:28,605 --> 00:08:32,240
‫In Ordnung, und das sollte ein kurzer Überblick sein, um uns

178
00:08:32,240 --> 00:08:33,610
‫den Einstieg zu

179
00:08:33,610 --> 00:08:37,210
‫erleichtern und MongoDB ab der nächsten Vorlesung tatsächlich zu verwenden.

180
00:08:37,210 --> 00:08:38,873
‫Also, lass uns jetzt weitermachen.

