Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken...

57
Fachbereich 2 Informatik und Ingenieurwissenschaften Bachelorarbeit Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Einplatinencomputern Im Studiengang Informatik zur Erlangung des akademischen Grades Bachelor of Science

Transcript of Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken...

Page 1: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Fachbereich 2Informatik und Ingenieurwissenschaften

Bachelorarbeit

Aufbau eines Clusters mit der NoSQL-DatenbankMongoDB auf Basis von Einplatinencomputern

Im Studiengang Informatik

zur Erlangung des akademischen GradesBachelor of Science

2

Thema Aufbau eines Clusters mit der NoSQL-Datenbank MongoDBauf Basis von Einplatinencomputern

Autor Danijel Klaic ltdklaicgmxdegtMatNr 996907

Version vom 16 August 2016

1 Betreuer Prof Dr Baun2 Betreuer Prof Dr Gabel

Eidesstattliche Erklaumlrung

Ich versichere die von mir vorgelegte Arbeit selbststaumlndig verfasst zu haben AlleStellen die woumlrtlich oder sinngemaumlszlig aus veroumlffentlichten oder nicht veroumlffentlich-ten Arbeiten anderer entnommen sind habe ich als entnommen kenntlich gemachtSaumlmtliche Quellen und Hilfsmittel die ich fuumlr die Arbeit benutzt habe sind ange-geben Die Arbeit hat mit gleichem Inhalt bzw in wesentlichen Teilen noch keineranderen Pruumlfungsbehoumlrde vorgelegen

Unterschrift Ort Datum

4

Danksagung

Ganz besonders moumlchte ich Herrn Prof Dr Baun herzlich danken fuumlr seine fachli-che und persoumlnliche Betreuung sowie fuumlr die Bereitstellung der technischen Mittelim Rahmen meiner Bachelorarbeit Auch moumlchte ich mich bei meinem Zweitkorrek-tor Prof Dr Gabel fuumlr die Annahme meiner Bachelorarbeit bedanken

Weiterhin bedanke ich mich bei meinen Eltern und Geschwistern die mir durchihre Unterstuumltzung mein Studium ermoumlglicht haben Mein Dank gilt ebenfalls mei-nen Freunden fuumlr die fachliche Ratschlaumlge und moralische Unterstuumltzung im Laufemeiner gesamten Studienzeit

5

Zusammenfassung

Ziel war es in der vorliegenden Bachelorarbeit einen eigenen Cluster mit der do-kumentenorientierten NoSQL-Datenbank MongoDB aufzubauen auf Basis von demEinplatinencomputer Raspberry Pi Die Server (Knoten) vom Cluster sollten mit der-selben Datenbank korrespondieren Raspberry Pi eignet sich fuumlr die Analyse und fuumlrden Aufbau eines eigenen Cluster Der Zusammenschluss mehrerer Geraumlte (Ras-pis) dieses Typs erfolgte uumlber ein Netzwerk

Dabei wurden die verteilten Funktionalitaumlten wie die Ausfallsicherheit und Parti-tionierung der Daten (Sklaierbarkeit) von der MongoDB untersucht Des weiterenwurden Vergleichungen von den Aggregationsmethoden durchgefuumlhrt Diese Ba-chelorarbeit ist sowohl fuumlr Informatiker als auch fuumlr Leute die sich mit Datenbank-technologien auseinandersetzen interessant

6

Abstract

The main goal of this thesis was to built up a cluster which is based on a document-oriented database called MongoDB and a single board computer Raspberry Pi Thenodes of the cluster should use the same database Raspberry Pi is suitable to ana-lyze and compose a cluster The composition of several devices (Raspis) was donevia a network

The following functionalties investigated Reliabitlity and Data partitioning on Mon-goDB Additionally comparisons were performed by aggregation methods This the-sis is interesting for computer scientists as well as for people who deal with databasetechnologies

Inhaltsverzeichnis 7

InhaltsverzeichnisEidesstattliche Erklaumlrung 3

Abbildungsverzeichnis 9

Tabellenverzeichnis 10

Abkuumlrzungsverzeichnis 11

1 Einleitung 1211 Aufbau 14

2 Technische Grundlagen 1521 NoSQL-Definition 1522 CAP-Theorem 1723 BASE 1824 NoSQL-Datenbanken-Vergleich 1825 MongoDB-Struktur 19

251 BSON 20252 ObjectID und Primaumlrschluumlssel 21253 Datentypen 22254 Collection 22255 CRUD 23

26 Raspberry Pi 24261 Raspberry Pi 3 Modell B 25

3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank Mon-goDB auf Basis von Raspberry Pi Einplatinencomputern 2631 Hardware- und Softwarekomponenten 2632 Installation und Konfiguration 27

321 Raspberry Pi Installation 27322 Raspberry Pi Konfiguration 28323 MongoDB Installation 33324 MongoDB Konfiguration 34

4 MongoDB 3741 Grundlagen 37

411 MongoDB-Dienst Starten 3742 Replikation 38

421 Oplog 38422 Master-Slave-Replikation 38423 Replica Sets 38424 Replication uumlber ein Raspberry Pi-Cluster 39

43 Vertikale und Horizontale Skalierung 44431 Vertikale Sklalierung 44432 Horizontale Sklalierung 44

44 Sharding 45441 Sharding uumlber ein Raspberry Pi-Cluster 45

Inhaltsverzeichnis 8

5 Untersuchung der Aggregationsmethoden 4951 Grafische Benutzeroberflaumlche fuumlr MongoDB 4952 Aggregation von Daten 49

521 Einfache Abfragemethoden zur Datenaggregation 50522 Aggregation Pipeline 51523 MapReduce 52

6 Fazit 54

Abbildungsverzeichnis 9

Abbildungsverzeichnis1 Veranschaulichung des CAP-Theorems 172 MongoDB-Struktur 193 ObjectID-Beispiel 214 Raspberry Pi 3 Modell B 255 Aufbau eines Clusters 276 Win32 Disk Manager 287 Menuuml des Konfigurations-Tool raspi-config 288 Programm Fing 309 Datei etcdhcpdconf 3010 PuTTY 3111 Anmeldung per Remotedesktopverbindung 3212 Grafische Oberflaumlche von Raspbian 3213 MongoDB-Dienstdatei 3614 Ablauf von Replica Sets 3815 Mitglieder von Replica Set 3916 Ausfall des Primaumlrservers 4017 Wiederaktiverung des Servers p101 4018 Status des Replica Sets 4119 Status des Replica Set uumlber HTTP-Interface 4120 JavaScript-Befehl rsconf() 4221 Prioritaumltenvergabe 4322 Lesezugriff durch Sekundaumlrserver 4323 Vertikale und Horizontale Skalierung 4424 Erstellung einer Sharding-Umgebung 4725 Sharding-Umgebung 4726 Aufteilung der Shards 4827 Robomongo 4928 Aggregationsmethode count() 5029 Aggregationsmethode distinct() 5030 Aggregationsmethode group() 5131 Aggregation Pipeline 5232 MapReduce 5233 Ergebnisanzeige der Aggregation 53

Tabellenverzeichnis 10

Tabellenverzeichnis1 NoSQL-Anbieter 192 Datenypen 223 System Collections 234 CRUD-Operationen 235 Technische Daten vom Raspberry Pi 3 Model B 256 Konfigurationsdatei mongodbconf 377 Replication-Umgebung 398 Sharding-Umgebung 469 Parameter bei group() 5010 Pipeline-Operationen 51

Tabellenverzeichnis 11

AbkuumlrzungsverzeichnisRaspis Mehrere Geraumlte von Raspberry PiSEQUEL Structured English QUEred LanguageSQL Structured Query LanguageDDL Data Definition LanguageIBM International Business Machines CorporationGPS Global Positioning SystemNoSQL Not Only Structured Query LanguageMongoDB Mongo DatenbankSWOT Strengths Weaknesses Opportunities ThreatsBASE Basically Available Soft State Eventual consistencyFIFO First In - First OutSD Secure DigitalUSB Universal Serial BUSSSH Secure ShellGPIOS General-purpose inputoutputCRUD Create Read Update DeleteJSON JavaScript Object NotationBSON Binary JSONID IdentifikatorCPU Central Processing UnitGPU Graphics Processing UnitDHCP Dynamic Host Configuration ProtocolIP InternetprotokollAPT Advanced Packaging ToolTCP Transmission Control ProtocolHTTP Hypertext Transfer Protocol

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 12

1 Einleitung

Edgar Frank Codd gelingt es in den 1960er und 1970er Jahren ein groszliger Fortschrittmit der Entwicklung von den ersten relationalen Datenbanksystemen [1] In dieserZeit haben relationale Datenbanken immer mehr an Bedeutung gewonnen So ent-stand auch in den 1970er auch die Datenbanksprache SEQUEL (Structured EnglishQUEred Language) basierend auf den relationalen Datenbanken Spaumlter wurde je-doch die Sprache unbenannt in SQL (Structured Query Language) [2]

SQL und relationale Datenbanken arbeiten nach festen Tabellenschemen Einer derSprachelemente vom SQL ist Data Definition Language (DDL) DDL gibt vor zuerstdie Tabelle zu erstellen und nachtraumlglich gibt es die Moumlglichkeit auch Spalten undDatentypen zu erzeugen [3] Die Flexibilitaumlt von dem oben aufgefuumlhrten Schema istbegrenzt Die Menge der Datenmenge ist uumlber die Zeit stetig gewachsen Laut IBMentstehen jeden Tag um die 25 Trillionen Byte an Daten Das heiszligt dass 90 derDaten aus den letzten 2 Jahren entstanden sind Die groszligen Datenmengen entste-hen aus allen Bereichen wie zum Beispiel aus dem Internetbereich GPS-Technikund Sensortechnik [4] Dies fuumlhrt oft dazu dass Datenbankmanagementsystemeund Hardware an ihre Grenzen stoszligen Bewaumlltigung dieser groszligen Datenmengenstellten fuumlr Entwickler neue Herausforderungen Somit entstanden neue NoSQL-Technologien Dies war ein Einstieg fuumlr die Entwicklung von Google MapReduceund Hadoop von Yahoo [5] Diese damals neuen Technologien verarbeiteten besserdie groszligen Datenmengen als zuvor somit war es ein wichtiger Fortschritt [5] DieNoSQL-Welt spielt heute wesentlich eine groszlige Rolle fuumlr die Datenverarbeitung vonBig Data Somit ist der Begriff NoSQL nicht mehr wegzudenken aus der Datenbank-welt

NoSQL ist eine Abkuumlrzung fuumlr Not only SQL (nicht immer nur SQL) Dies be-deutet nicht dass man auf SQL bzw relationaler Datenbank verzichtet sondernauch Alternativen einbezieht zur SQL-Welt [6] NoSQL-Implementierungen sind inmehrere Kategorien unterteilt [6] die in dieser Bachelorarbeit naumlher erklaumlrt werdenMeistens werden groszlige Datenmengen schneller verarbeitet als im Gegensatz zurelationalen Datenbanken Immer mehr NoSQL-Datenbanken verbreiten sich Zur-zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7] Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank MongoDB Es handelt hierbei um eine quelloffene Software MongoDBverwendet fuumlr die Implementierung der Datenbank die Programmiersprache C++[8] Zudem gibt es zahlreiche Mongo-DB-Treiber die in den ProgrammiersprachenC C++ Java Ruby Phyton und PHP zu Verfuumlgung stehen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 13

Viele bekannte Groszligunternehmen wie Facebook Google Expedia und Bosch be-nutzen zurzeit MongoDB [9]

Der Begriff Mongo leitet sich vom englischen Wort humongous was uumlbersetzt be-deutet gigantisch oder wahnsinnig groszlig es wird auf den Volumen Aspekt vonBig Data hingedeutet [10] Zurzeit besteht keine exakte Definition fuumlr Big Data DasSoftwareunternehmen 10gen entwickelte im Jahr 2007 die erste Version von Mon-goDB Im Jahre 2013 kam es auch zu einer Namensaumlnderung des Softwareunter-nehmens die sich ebenfalls in MongoDB umbenannte Neben dem Volumen Aspektsind noch zwei weitere Velocity und Variety Aspekte vorhanden Besonders fuumlr dieBig-Data-Aspekte Volume und Velocity empfiehlt sich die Verwendung von verteiltenSystemen Der Begriff Big Data entstand im Jahr 2001 von Doug Laney (damaligenAnalysten der Meta Group) Laney definierte Big Data als Daten mit groszligem Volu-men (Volume) groszliger Vielfalt an Datenformaten (Variety) und groszligen Geschwin-digkeit (Velocity) mit der neue Daten entstehen [11]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 14

11 Aufbau

Die Bachelorarbeit gliedert sich in sechs Teilen Auf die Einleitung folgend widmetsich der zweite Teil mit der Entstehung und den Grundlagen von Raspberry Pi undMongoDB Weiterhin befasst sich das dritte Kapitel mit dem Aufbau InstallationKonfiguration und den dazugehoumlrigen Hardware- und Softwarekomponenten

Im Mittelpunkt des vierten Kapitels steht die Implementierung der Datenreplikationund Datenfragmentierung innerhalb eines Clusters Es werden hier die Funktionali-taumlten eines Cluster ausgefuumlhrt und ausgewertet

Das Kapitel 5 befasst sich mit den Aggregationsmethoden Der Schlussteil dieserArbeit endet mit einem Fazit

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 15

2 Technische Grundlagen

Das zweite Kapitel gibt einen Einblick in die Grundlagen von NoSQL-Datenbankenund Raspberry Pi

21 NoSQL-Definition

Bislang gibt es keine einheitliche und strikte Definition von NoSQL Den Versucheiner Definition haben die Autoren Edlich Friedland Hampe Brauer in ihrem Buch[12] vorgenommen Die besagt

bull Kein relationales DatenmodellEine Vielfaumlltigkeit der Modelle wird gefordert dies bedeutet dass das relatio-nale Modell nicht immer fuumlr jede Anforderung am besten geeignet ist Fuumlr Pro-jekte eignet sich die SWOT-Analyse (StrengthsStaumlrken WeaknessSchwauml-chen OpportunitiesChancen ThreatsBedrohungen) die analysiert welchesModell bzw Datenbanksystem infrage kommt [12]

bull Eignung fuumlr Systeme mit verteilter und horizontaler SkalierbarkeitRelationale Datenbanksysteme arbeiten in der Regel nachdem Scale-up Prin-zip bzw vertikale Skalierbarkeit in dem eine technische Aufruumlstung des Rech-ners stattfindet Im Gegensatz zu den relationalen Datenbanksysteme arbeitendie NoSQL-Datenbanksysteme oft nachdem Scale-out-Prinzip bzw horizon-tale Skalierbarkeit die eine schnellere Reaktionszeit auf Anfragen und Ma-nipulationen durch dynamisches Einbinden und Loumlschen von Rechnerknotenes ermoumlglichen Aufgrund einer vorhandenen Fehlertoleranz ist auch im vor-liegenden Fall ein Knotenfall ohne Konsequenz moumlglich Dadurch sinken dieAnschaffungskosten [12]

bull Quelloffene SoftwareDie meisten NoSQL-Datenbanksysteme sind quelloffen und koumlnnen dadurcheine Voraussetzung sein fuumlr eine SWOT-Analyse aber mit Sicherheit kein ent-scheidendes Argument [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 16

bull Frei von Schemen oder nur von schwaumlcheren Restriktionen betroffenDie Agilitaumlten der Datenstrukturen von Web20-Anwendungen muumlssen in derheutigen Zeit steigen Datenbanksysteme und Anwendungen muumlssen mit un-terschiedlich strukturierten Informationen im Web- und Dokumentbereich um-gehen koumlnnen Die Folge waumlre dass die Anwendung diese Schemainforma-tion zuruumlck verfolgen muumlsste Die Voraussetzung sind schnellere Reaktions-zeiten bei einer Schemaaumlnderung Schemaaumlnderungen koumlnnen nicht wie beiden relationalen Datenbanken ein System minuten- oder stundenlang auszligerBetrieb nehmen [12]

bull Einfache Datenreplikation zur Unterstuumltzung der verteilten ArchitekturDie Grundidee bei einer Datenreplikation ist die Verteilung der Daten auf meh-rere Knoten Es wird eine schnelle und einfache Datenreplikation gefordertdamit die Daten auch bei einem Kontenausfall noch vorhanden sind Die meis-ten NoSQL-Datenbanksysteme arbeiten damit erfolgreich Diese Vorausset-zung kommt zu Stande mit einer abgeschwaumlchten Konsistenzanforderung diein dem CAP-Theorem mit der Eigenschaft evenutally consistency vorhandenist Die Umsetzung erfolgt praktisch uumlber das BASE-Konsistenzmodell [12]

bull Einfache APISQL war sicherlich einfach deklarativ auch sehr ausdrucksstark und vor allemstandardisiert Der wesentlicher Nachteil bei vielen NoSQL-Datenbanksystemeist dass es zwar eine einfache API gibt aber nicht alle Funktionalitaumlten anbie-tet und somit nicht sehr bedeutsam Dadurch entsteht die Folge dass eineEntwicklung von Funktionalitaumlten fuumlr die Anwendung notwendig ist Zur Zeitentstehen neue Funktionalitaumlten die sich auch fuumlr Web20-Anwendungen eig-nen [12]

bull Kein ACID als KonsistenzmodellDie ACID-Eigenschaften verkomplizieren und verlangsamen die verteilte Da-tenhaltung und stellen somit ein Problem fuumlr NoSQL-Datenbanksysteme daDie Eigenschaft evenutally consistency ermoumlglicht den Ansatz dass Datenin den verschiedenen Knoten voruumlbergehend auch inkonsistent sein duumlrfenDieses Szenario kommt oft in den Internet-Anwendungen vor und nicht zumBeispiel sehr oft bei klassischen Geschaumlftsdaten in dem meistens relationaleDatenbanksysteme infrage kommen Es existieren auch Datenbanksystemedie sowohl mit ACID als auch mit BASE arbeiten koumlnnen [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 2: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

2

Thema Aufbau eines Clusters mit der NoSQL-Datenbank MongoDBauf Basis von Einplatinencomputern

Autor Danijel Klaic ltdklaicgmxdegtMatNr 996907

Version vom 16 August 2016

1 Betreuer Prof Dr Baun2 Betreuer Prof Dr Gabel

Eidesstattliche Erklaumlrung

Ich versichere die von mir vorgelegte Arbeit selbststaumlndig verfasst zu haben AlleStellen die woumlrtlich oder sinngemaumlszlig aus veroumlffentlichten oder nicht veroumlffentlich-ten Arbeiten anderer entnommen sind habe ich als entnommen kenntlich gemachtSaumlmtliche Quellen und Hilfsmittel die ich fuumlr die Arbeit benutzt habe sind ange-geben Die Arbeit hat mit gleichem Inhalt bzw in wesentlichen Teilen noch keineranderen Pruumlfungsbehoumlrde vorgelegen

Unterschrift Ort Datum

4

Danksagung

Ganz besonders moumlchte ich Herrn Prof Dr Baun herzlich danken fuumlr seine fachli-che und persoumlnliche Betreuung sowie fuumlr die Bereitstellung der technischen Mittelim Rahmen meiner Bachelorarbeit Auch moumlchte ich mich bei meinem Zweitkorrek-tor Prof Dr Gabel fuumlr die Annahme meiner Bachelorarbeit bedanken

Weiterhin bedanke ich mich bei meinen Eltern und Geschwistern die mir durchihre Unterstuumltzung mein Studium ermoumlglicht haben Mein Dank gilt ebenfalls mei-nen Freunden fuumlr die fachliche Ratschlaumlge und moralische Unterstuumltzung im Laufemeiner gesamten Studienzeit

5

Zusammenfassung

Ziel war es in der vorliegenden Bachelorarbeit einen eigenen Cluster mit der do-kumentenorientierten NoSQL-Datenbank MongoDB aufzubauen auf Basis von demEinplatinencomputer Raspberry Pi Die Server (Knoten) vom Cluster sollten mit der-selben Datenbank korrespondieren Raspberry Pi eignet sich fuumlr die Analyse und fuumlrden Aufbau eines eigenen Cluster Der Zusammenschluss mehrerer Geraumlte (Ras-pis) dieses Typs erfolgte uumlber ein Netzwerk

Dabei wurden die verteilten Funktionalitaumlten wie die Ausfallsicherheit und Parti-tionierung der Daten (Sklaierbarkeit) von der MongoDB untersucht Des weiterenwurden Vergleichungen von den Aggregationsmethoden durchgefuumlhrt Diese Ba-chelorarbeit ist sowohl fuumlr Informatiker als auch fuumlr Leute die sich mit Datenbank-technologien auseinandersetzen interessant

6

Abstract

The main goal of this thesis was to built up a cluster which is based on a document-oriented database called MongoDB and a single board computer Raspberry Pi Thenodes of the cluster should use the same database Raspberry Pi is suitable to ana-lyze and compose a cluster The composition of several devices (Raspis) was donevia a network

The following functionalties investigated Reliabitlity and Data partitioning on Mon-goDB Additionally comparisons were performed by aggregation methods This the-sis is interesting for computer scientists as well as for people who deal with databasetechnologies

Inhaltsverzeichnis 7

InhaltsverzeichnisEidesstattliche Erklaumlrung 3

Abbildungsverzeichnis 9

Tabellenverzeichnis 10

Abkuumlrzungsverzeichnis 11

1 Einleitung 1211 Aufbau 14

2 Technische Grundlagen 1521 NoSQL-Definition 1522 CAP-Theorem 1723 BASE 1824 NoSQL-Datenbanken-Vergleich 1825 MongoDB-Struktur 19

251 BSON 20252 ObjectID und Primaumlrschluumlssel 21253 Datentypen 22254 Collection 22255 CRUD 23

26 Raspberry Pi 24261 Raspberry Pi 3 Modell B 25

3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank Mon-goDB auf Basis von Raspberry Pi Einplatinencomputern 2631 Hardware- und Softwarekomponenten 2632 Installation und Konfiguration 27

321 Raspberry Pi Installation 27322 Raspberry Pi Konfiguration 28323 MongoDB Installation 33324 MongoDB Konfiguration 34

4 MongoDB 3741 Grundlagen 37

411 MongoDB-Dienst Starten 3742 Replikation 38

421 Oplog 38422 Master-Slave-Replikation 38423 Replica Sets 38424 Replication uumlber ein Raspberry Pi-Cluster 39

43 Vertikale und Horizontale Skalierung 44431 Vertikale Sklalierung 44432 Horizontale Sklalierung 44

44 Sharding 45441 Sharding uumlber ein Raspberry Pi-Cluster 45

Inhaltsverzeichnis 8

5 Untersuchung der Aggregationsmethoden 4951 Grafische Benutzeroberflaumlche fuumlr MongoDB 4952 Aggregation von Daten 49

521 Einfache Abfragemethoden zur Datenaggregation 50522 Aggregation Pipeline 51523 MapReduce 52

6 Fazit 54

Abbildungsverzeichnis 9

Abbildungsverzeichnis1 Veranschaulichung des CAP-Theorems 172 MongoDB-Struktur 193 ObjectID-Beispiel 214 Raspberry Pi 3 Modell B 255 Aufbau eines Clusters 276 Win32 Disk Manager 287 Menuuml des Konfigurations-Tool raspi-config 288 Programm Fing 309 Datei etcdhcpdconf 3010 PuTTY 3111 Anmeldung per Remotedesktopverbindung 3212 Grafische Oberflaumlche von Raspbian 3213 MongoDB-Dienstdatei 3614 Ablauf von Replica Sets 3815 Mitglieder von Replica Set 3916 Ausfall des Primaumlrservers 4017 Wiederaktiverung des Servers p101 4018 Status des Replica Sets 4119 Status des Replica Set uumlber HTTP-Interface 4120 JavaScript-Befehl rsconf() 4221 Prioritaumltenvergabe 4322 Lesezugriff durch Sekundaumlrserver 4323 Vertikale und Horizontale Skalierung 4424 Erstellung einer Sharding-Umgebung 4725 Sharding-Umgebung 4726 Aufteilung der Shards 4827 Robomongo 4928 Aggregationsmethode count() 5029 Aggregationsmethode distinct() 5030 Aggregationsmethode group() 5131 Aggregation Pipeline 5232 MapReduce 5233 Ergebnisanzeige der Aggregation 53

Tabellenverzeichnis 10

Tabellenverzeichnis1 NoSQL-Anbieter 192 Datenypen 223 System Collections 234 CRUD-Operationen 235 Technische Daten vom Raspberry Pi 3 Model B 256 Konfigurationsdatei mongodbconf 377 Replication-Umgebung 398 Sharding-Umgebung 469 Parameter bei group() 5010 Pipeline-Operationen 51

Tabellenverzeichnis 11

AbkuumlrzungsverzeichnisRaspis Mehrere Geraumlte von Raspberry PiSEQUEL Structured English QUEred LanguageSQL Structured Query LanguageDDL Data Definition LanguageIBM International Business Machines CorporationGPS Global Positioning SystemNoSQL Not Only Structured Query LanguageMongoDB Mongo DatenbankSWOT Strengths Weaknesses Opportunities ThreatsBASE Basically Available Soft State Eventual consistencyFIFO First In - First OutSD Secure DigitalUSB Universal Serial BUSSSH Secure ShellGPIOS General-purpose inputoutputCRUD Create Read Update DeleteJSON JavaScript Object NotationBSON Binary JSONID IdentifikatorCPU Central Processing UnitGPU Graphics Processing UnitDHCP Dynamic Host Configuration ProtocolIP InternetprotokollAPT Advanced Packaging ToolTCP Transmission Control ProtocolHTTP Hypertext Transfer Protocol

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 12

1 Einleitung

Edgar Frank Codd gelingt es in den 1960er und 1970er Jahren ein groszliger Fortschrittmit der Entwicklung von den ersten relationalen Datenbanksystemen [1] In dieserZeit haben relationale Datenbanken immer mehr an Bedeutung gewonnen So ent-stand auch in den 1970er auch die Datenbanksprache SEQUEL (Structured EnglishQUEred Language) basierend auf den relationalen Datenbanken Spaumlter wurde je-doch die Sprache unbenannt in SQL (Structured Query Language) [2]

SQL und relationale Datenbanken arbeiten nach festen Tabellenschemen Einer derSprachelemente vom SQL ist Data Definition Language (DDL) DDL gibt vor zuerstdie Tabelle zu erstellen und nachtraumlglich gibt es die Moumlglichkeit auch Spalten undDatentypen zu erzeugen [3] Die Flexibilitaumlt von dem oben aufgefuumlhrten Schema istbegrenzt Die Menge der Datenmenge ist uumlber die Zeit stetig gewachsen Laut IBMentstehen jeden Tag um die 25 Trillionen Byte an Daten Das heiszligt dass 90 derDaten aus den letzten 2 Jahren entstanden sind Die groszligen Datenmengen entste-hen aus allen Bereichen wie zum Beispiel aus dem Internetbereich GPS-Technikund Sensortechnik [4] Dies fuumlhrt oft dazu dass Datenbankmanagementsystemeund Hardware an ihre Grenzen stoszligen Bewaumlltigung dieser groszligen Datenmengenstellten fuumlr Entwickler neue Herausforderungen Somit entstanden neue NoSQL-Technologien Dies war ein Einstieg fuumlr die Entwicklung von Google MapReduceund Hadoop von Yahoo [5] Diese damals neuen Technologien verarbeiteten besserdie groszligen Datenmengen als zuvor somit war es ein wichtiger Fortschritt [5] DieNoSQL-Welt spielt heute wesentlich eine groszlige Rolle fuumlr die Datenverarbeitung vonBig Data Somit ist der Begriff NoSQL nicht mehr wegzudenken aus der Datenbank-welt

NoSQL ist eine Abkuumlrzung fuumlr Not only SQL (nicht immer nur SQL) Dies be-deutet nicht dass man auf SQL bzw relationaler Datenbank verzichtet sondernauch Alternativen einbezieht zur SQL-Welt [6] NoSQL-Implementierungen sind inmehrere Kategorien unterteilt [6] die in dieser Bachelorarbeit naumlher erklaumlrt werdenMeistens werden groszlige Datenmengen schneller verarbeitet als im Gegensatz zurelationalen Datenbanken Immer mehr NoSQL-Datenbanken verbreiten sich Zur-zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7] Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank MongoDB Es handelt hierbei um eine quelloffene Software MongoDBverwendet fuumlr die Implementierung der Datenbank die Programmiersprache C++[8] Zudem gibt es zahlreiche Mongo-DB-Treiber die in den ProgrammiersprachenC C++ Java Ruby Phyton und PHP zu Verfuumlgung stehen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 13

Viele bekannte Groszligunternehmen wie Facebook Google Expedia und Bosch be-nutzen zurzeit MongoDB [9]

Der Begriff Mongo leitet sich vom englischen Wort humongous was uumlbersetzt be-deutet gigantisch oder wahnsinnig groszlig es wird auf den Volumen Aspekt vonBig Data hingedeutet [10] Zurzeit besteht keine exakte Definition fuumlr Big Data DasSoftwareunternehmen 10gen entwickelte im Jahr 2007 die erste Version von Mon-goDB Im Jahre 2013 kam es auch zu einer Namensaumlnderung des Softwareunter-nehmens die sich ebenfalls in MongoDB umbenannte Neben dem Volumen Aspektsind noch zwei weitere Velocity und Variety Aspekte vorhanden Besonders fuumlr dieBig-Data-Aspekte Volume und Velocity empfiehlt sich die Verwendung von verteiltenSystemen Der Begriff Big Data entstand im Jahr 2001 von Doug Laney (damaligenAnalysten der Meta Group) Laney definierte Big Data als Daten mit groszligem Volu-men (Volume) groszliger Vielfalt an Datenformaten (Variety) und groszligen Geschwin-digkeit (Velocity) mit der neue Daten entstehen [11]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 14

11 Aufbau

Die Bachelorarbeit gliedert sich in sechs Teilen Auf die Einleitung folgend widmetsich der zweite Teil mit der Entstehung und den Grundlagen von Raspberry Pi undMongoDB Weiterhin befasst sich das dritte Kapitel mit dem Aufbau InstallationKonfiguration und den dazugehoumlrigen Hardware- und Softwarekomponenten

Im Mittelpunkt des vierten Kapitels steht die Implementierung der Datenreplikationund Datenfragmentierung innerhalb eines Clusters Es werden hier die Funktionali-taumlten eines Cluster ausgefuumlhrt und ausgewertet

Das Kapitel 5 befasst sich mit den Aggregationsmethoden Der Schlussteil dieserArbeit endet mit einem Fazit

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 15

2 Technische Grundlagen

Das zweite Kapitel gibt einen Einblick in die Grundlagen von NoSQL-Datenbankenund Raspberry Pi

21 NoSQL-Definition

Bislang gibt es keine einheitliche und strikte Definition von NoSQL Den Versucheiner Definition haben die Autoren Edlich Friedland Hampe Brauer in ihrem Buch[12] vorgenommen Die besagt

bull Kein relationales DatenmodellEine Vielfaumlltigkeit der Modelle wird gefordert dies bedeutet dass das relatio-nale Modell nicht immer fuumlr jede Anforderung am besten geeignet ist Fuumlr Pro-jekte eignet sich die SWOT-Analyse (StrengthsStaumlrken WeaknessSchwauml-chen OpportunitiesChancen ThreatsBedrohungen) die analysiert welchesModell bzw Datenbanksystem infrage kommt [12]

bull Eignung fuumlr Systeme mit verteilter und horizontaler SkalierbarkeitRelationale Datenbanksysteme arbeiten in der Regel nachdem Scale-up Prin-zip bzw vertikale Skalierbarkeit in dem eine technische Aufruumlstung des Rech-ners stattfindet Im Gegensatz zu den relationalen Datenbanksysteme arbeitendie NoSQL-Datenbanksysteme oft nachdem Scale-out-Prinzip bzw horizon-tale Skalierbarkeit die eine schnellere Reaktionszeit auf Anfragen und Ma-nipulationen durch dynamisches Einbinden und Loumlschen von Rechnerknotenes ermoumlglichen Aufgrund einer vorhandenen Fehlertoleranz ist auch im vor-liegenden Fall ein Knotenfall ohne Konsequenz moumlglich Dadurch sinken dieAnschaffungskosten [12]

bull Quelloffene SoftwareDie meisten NoSQL-Datenbanksysteme sind quelloffen und koumlnnen dadurcheine Voraussetzung sein fuumlr eine SWOT-Analyse aber mit Sicherheit kein ent-scheidendes Argument [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 16

bull Frei von Schemen oder nur von schwaumlcheren Restriktionen betroffenDie Agilitaumlten der Datenstrukturen von Web20-Anwendungen muumlssen in derheutigen Zeit steigen Datenbanksysteme und Anwendungen muumlssen mit un-terschiedlich strukturierten Informationen im Web- und Dokumentbereich um-gehen koumlnnen Die Folge waumlre dass die Anwendung diese Schemainforma-tion zuruumlck verfolgen muumlsste Die Voraussetzung sind schnellere Reaktions-zeiten bei einer Schemaaumlnderung Schemaaumlnderungen koumlnnen nicht wie beiden relationalen Datenbanken ein System minuten- oder stundenlang auszligerBetrieb nehmen [12]

bull Einfache Datenreplikation zur Unterstuumltzung der verteilten ArchitekturDie Grundidee bei einer Datenreplikation ist die Verteilung der Daten auf meh-rere Knoten Es wird eine schnelle und einfache Datenreplikation gefordertdamit die Daten auch bei einem Kontenausfall noch vorhanden sind Die meis-ten NoSQL-Datenbanksysteme arbeiten damit erfolgreich Diese Vorausset-zung kommt zu Stande mit einer abgeschwaumlchten Konsistenzanforderung diein dem CAP-Theorem mit der Eigenschaft evenutally consistency vorhandenist Die Umsetzung erfolgt praktisch uumlber das BASE-Konsistenzmodell [12]

bull Einfache APISQL war sicherlich einfach deklarativ auch sehr ausdrucksstark und vor allemstandardisiert Der wesentlicher Nachteil bei vielen NoSQL-Datenbanksystemeist dass es zwar eine einfache API gibt aber nicht alle Funktionalitaumlten anbie-tet und somit nicht sehr bedeutsam Dadurch entsteht die Folge dass eineEntwicklung von Funktionalitaumlten fuumlr die Anwendung notwendig ist Zur Zeitentstehen neue Funktionalitaumlten die sich auch fuumlr Web20-Anwendungen eig-nen [12]

bull Kein ACID als KonsistenzmodellDie ACID-Eigenschaften verkomplizieren und verlangsamen die verteilte Da-tenhaltung und stellen somit ein Problem fuumlr NoSQL-Datenbanksysteme daDie Eigenschaft evenutally consistency ermoumlglicht den Ansatz dass Datenin den verschiedenen Knoten voruumlbergehend auch inkonsistent sein duumlrfenDieses Szenario kommt oft in den Internet-Anwendungen vor und nicht zumBeispiel sehr oft bei klassischen Geschaumlftsdaten in dem meistens relationaleDatenbanksysteme infrage kommen Es existieren auch Datenbanksystemedie sowohl mit ACID als auch mit BASE arbeiten koumlnnen [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 3: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Eidesstattliche Erklaumlrung

Ich versichere die von mir vorgelegte Arbeit selbststaumlndig verfasst zu haben AlleStellen die woumlrtlich oder sinngemaumlszlig aus veroumlffentlichten oder nicht veroumlffentlich-ten Arbeiten anderer entnommen sind habe ich als entnommen kenntlich gemachtSaumlmtliche Quellen und Hilfsmittel die ich fuumlr die Arbeit benutzt habe sind ange-geben Die Arbeit hat mit gleichem Inhalt bzw in wesentlichen Teilen noch keineranderen Pruumlfungsbehoumlrde vorgelegen

Unterschrift Ort Datum

4

Danksagung

Ganz besonders moumlchte ich Herrn Prof Dr Baun herzlich danken fuumlr seine fachli-che und persoumlnliche Betreuung sowie fuumlr die Bereitstellung der technischen Mittelim Rahmen meiner Bachelorarbeit Auch moumlchte ich mich bei meinem Zweitkorrek-tor Prof Dr Gabel fuumlr die Annahme meiner Bachelorarbeit bedanken

Weiterhin bedanke ich mich bei meinen Eltern und Geschwistern die mir durchihre Unterstuumltzung mein Studium ermoumlglicht haben Mein Dank gilt ebenfalls mei-nen Freunden fuumlr die fachliche Ratschlaumlge und moralische Unterstuumltzung im Laufemeiner gesamten Studienzeit

5

Zusammenfassung

Ziel war es in der vorliegenden Bachelorarbeit einen eigenen Cluster mit der do-kumentenorientierten NoSQL-Datenbank MongoDB aufzubauen auf Basis von demEinplatinencomputer Raspberry Pi Die Server (Knoten) vom Cluster sollten mit der-selben Datenbank korrespondieren Raspberry Pi eignet sich fuumlr die Analyse und fuumlrden Aufbau eines eigenen Cluster Der Zusammenschluss mehrerer Geraumlte (Ras-pis) dieses Typs erfolgte uumlber ein Netzwerk

Dabei wurden die verteilten Funktionalitaumlten wie die Ausfallsicherheit und Parti-tionierung der Daten (Sklaierbarkeit) von der MongoDB untersucht Des weiterenwurden Vergleichungen von den Aggregationsmethoden durchgefuumlhrt Diese Ba-chelorarbeit ist sowohl fuumlr Informatiker als auch fuumlr Leute die sich mit Datenbank-technologien auseinandersetzen interessant

6

Abstract

The main goal of this thesis was to built up a cluster which is based on a document-oriented database called MongoDB and a single board computer Raspberry Pi Thenodes of the cluster should use the same database Raspberry Pi is suitable to ana-lyze and compose a cluster The composition of several devices (Raspis) was donevia a network

The following functionalties investigated Reliabitlity and Data partitioning on Mon-goDB Additionally comparisons were performed by aggregation methods This the-sis is interesting for computer scientists as well as for people who deal with databasetechnologies

Inhaltsverzeichnis 7

InhaltsverzeichnisEidesstattliche Erklaumlrung 3

Abbildungsverzeichnis 9

Tabellenverzeichnis 10

Abkuumlrzungsverzeichnis 11

1 Einleitung 1211 Aufbau 14

2 Technische Grundlagen 1521 NoSQL-Definition 1522 CAP-Theorem 1723 BASE 1824 NoSQL-Datenbanken-Vergleich 1825 MongoDB-Struktur 19

251 BSON 20252 ObjectID und Primaumlrschluumlssel 21253 Datentypen 22254 Collection 22255 CRUD 23

26 Raspberry Pi 24261 Raspberry Pi 3 Modell B 25

3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank Mon-goDB auf Basis von Raspberry Pi Einplatinencomputern 2631 Hardware- und Softwarekomponenten 2632 Installation und Konfiguration 27

321 Raspberry Pi Installation 27322 Raspberry Pi Konfiguration 28323 MongoDB Installation 33324 MongoDB Konfiguration 34

4 MongoDB 3741 Grundlagen 37

411 MongoDB-Dienst Starten 3742 Replikation 38

421 Oplog 38422 Master-Slave-Replikation 38423 Replica Sets 38424 Replication uumlber ein Raspberry Pi-Cluster 39

43 Vertikale und Horizontale Skalierung 44431 Vertikale Sklalierung 44432 Horizontale Sklalierung 44

44 Sharding 45441 Sharding uumlber ein Raspberry Pi-Cluster 45

Inhaltsverzeichnis 8

5 Untersuchung der Aggregationsmethoden 4951 Grafische Benutzeroberflaumlche fuumlr MongoDB 4952 Aggregation von Daten 49

521 Einfache Abfragemethoden zur Datenaggregation 50522 Aggregation Pipeline 51523 MapReduce 52

6 Fazit 54

Abbildungsverzeichnis 9

Abbildungsverzeichnis1 Veranschaulichung des CAP-Theorems 172 MongoDB-Struktur 193 ObjectID-Beispiel 214 Raspberry Pi 3 Modell B 255 Aufbau eines Clusters 276 Win32 Disk Manager 287 Menuuml des Konfigurations-Tool raspi-config 288 Programm Fing 309 Datei etcdhcpdconf 3010 PuTTY 3111 Anmeldung per Remotedesktopverbindung 3212 Grafische Oberflaumlche von Raspbian 3213 MongoDB-Dienstdatei 3614 Ablauf von Replica Sets 3815 Mitglieder von Replica Set 3916 Ausfall des Primaumlrservers 4017 Wiederaktiverung des Servers p101 4018 Status des Replica Sets 4119 Status des Replica Set uumlber HTTP-Interface 4120 JavaScript-Befehl rsconf() 4221 Prioritaumltenvergabe 4322 Lesezugriff durch Sekundaumlrserver 4323 Vertikale und Horizontale Skalierung 4424 Erstellung einer Sharding-Umgebung 4725 Sharding-Umgebung 4726 Aufteilung der Shards 4827 Robomongo 4928 Aggregationsmethode count() 5029 Aggregationsmethode distinct() 5030 Aggregationsmethode group() 5131 Aggregation Pipeline 5232 MapReduce 5233 Ergebnisanzeige der Aggregation 53

Tabellenverzeichnis 10

Tabellenverzeichnis1 NoSQL-Anbieter 192 Datenypen 223 System Collections 234 CRUD-Operationen 235 Technische Daten vom Raspberry Pi 3 Model B 256 Konfigurationsdatei mongodbconf 377 Replication-Umgebung 398 Sharding-Umgebung 469 Parameter bei group() 5010 Pipeline-Operationen 51

Tabellenverzeichnis 11

AbkuumlrzungsverzeichnisRaspis Mehrere Geraumlte von Raspberry PiSEQUEL Structured English QUEred LanguageSQL Structured Query LanguageDDL Data Definition LanguageIBM International Business Machines CorporationGPS Global Positioning SystemNoSQL Not Only Structured Query LanguageMongoDB Mongo DatenbankSWOT Strengths Weaknesses Opportunities ThreatsBASE Basically Available Soft State Eventual consistencyFIFO First In - First OutSD Secure DigitalUSB Universal Serial BUSSSH Secure ShellGPIOS General-purpose inputoutputCRUD Create Read Update DeleteJSON JavaScript Object NotationBSON Binary JSONID IdentifikatorCPU Central Processing UnitGPU Graphics Processing UnitDHCP Dynamic Host Configuration ProtocolIP InternetprotokollAPT Advanced Packaging ToolTCP Transmission Control ProtocolHTTP Hypertext Transfer Protocol

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 12

1 Einleitung

Edgar Frank Codd gelingt es in den 1960er und 1970er Jahren ein groszliger Fortschrittmit der Entwicklung von den ersten relationalen Datenbanksystemen [1] In dieserZeit haben relationale Datenbanken immer mehr an Bedeutung gewonnen So ent-stand auch in den 1970er auch die Datenbanksprache SEQUEL (Structured EnglishQUEred Language) basierend auf den relationalen Datenbanken Spaumlter wurde je-doch die Sprache unbenannt in SQL (Structured Query Language) [2]

SQL und relationale Datenbanken arbeiten nach festen Tabellenschemen Einer derSprachelemente vom SQL ist Data Definition Language (DDL) DDL gibt vor zuerstdie Tabelle zu erstellen und nachtraumlglich gibt es die Moumlglichkeit auch Spalten undDatentypen zu erzeugen [3] Die Flexibilitaumlt von dem oben aufgefuumlhrten Schema istbegrenzt Die Menge der Datenmenge ist uumlber die Zeit stetig gewachsen Laut IBMentstehen jeden Tag um die 25 Trillionen Byte an Daten Das heiszligt dass 90 derDaten aus den letzten 2 Jahren entstanden sind Die groszligen Datenmengen entste-hen aus allen Bereichen wie zum Beispiel aus dem Internetbereich GPS-Technikund Sensortechnik [4] Dies fuumlhrt oft dazu dass Datenbankmanagementsystemeund Hardware an ihre Grenzen stoszligen Bewaumlltigung dieser groszligen Datenmengenstellten fuumlr Entwickler neue Herausforderungen Somit entstanden neue NoSQL-Technologien Dies war ein Einstieg fuumlr die Entwicklung von Google MapReduceund Hadoop von Yahoo [5] Diese damals neuen Technologien verarbeiteten besserdie groszligen Datenmengen als zuvor somit war es ein wichtiger Fortschritt [5] DieNoSQL-Welt spielt heute wesentlich eine groszlige Rolle fuumlr die Datenverarbeitung vonBig Data Somit ist der Begriff NoSQL nicht mehr wegzudenken aus der Datenbank-welt

NoSQL ist eine Abkuumlrzung fuumlr Not only SQL (nicht immer nur SQL) Dies be-deutet nicht dass man auf SQL bzw relationaler Datenbank verzichtet sondernauch Alternativen einbezieht zur SQL-Welt [6] NoSQL-Implementierungen sind inmehrere Kategorien unterteilt [6] die in dieser Bachelorarbeit naumlher erklaumlrt werdenMeistens werden groszlige Datenmengen schneller verarbeitet als im Gegensatz zurelationalen Datenbanken Immer mehr NoSQL-Datenbanken verbreiten sich Zur-zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7] Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank MongoDB Es handelt hierbei um eine quelloffene Software MongoDBverwendet fuumlr die Implementierung der Datenbank die Programmiersprache C++[8] Zudem gibt es zahlreiche Mongo-DB-Treiber die in den ProgrammiersprachenC C++ Java Ruby Phyton und PHP zu Verfuumlgung stehen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 13

Viele bekannte Groszligunternehmen wie Facebook Google Expedia und Bosch be-nutzen zurzeit MongoDB [9]

Der Begriff Mongo leitet sich vom englischen Wort humongous was uumlbersetzt be-deutet gigantisch oder wahnsinnig groszlig es wird auf den Volumen Aspekt vonBig Data hingedeutet [10] Zurzeit besteht keine exakte Definition fuumlr Big Data DasSoftwareunternehmen 10gen entwickelte im Jahr 2007 die erste Version von Mon-goDB Im Jahre 2013 kam es auch zu einer Namensaumlnderung des Softwareunter-nehmens die sich ebenfalls in MongoDB umbenannte Neben dem Volumen Aspektsind noch zwei weitere Velocity und Variety Aspekte vorhanden Besonders fuumlr dieBig-Data-Aspekte Volume und Velocity empfiehlt sich die Verwendung von verteiltenSystemen Der Begriff Big Data entstand im Jahr 2001 von Doug Laney (damaligenAnalysten der Meta Group) Laney definierte Big Data als Daten mit groszligem Volu-men (Volume) groszliger Vielfalt an Datenformaten (Variety) und groszligen Geschwin-digkeit (Velocity) mit der neue Daten entstehen [11]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 14

11 Aufbau

Die Bachelorarbeit gliedert sich in sechs Teilen Auf die Einleitung folgend widmetsich der zweite Teil mit der Entstehung und den Grundlagen von Raspberry Pi undMongoDB Weiterhin befasst sich das dritte Kapitel mit dem Aufbau InstallationKonfiguration und den dazugehoumlrigen Hardware- und Softwarekomponenten

Im Mittelpunkt des vierten Kapitels steht die Implementierung der Datenreplikationund Datenfragmentierung innerhalb eines Clusters Es werden hier die Funktionali-taumlten eines Cluster ausgefuumlhrt und ausgewertet

Das Kapitel 5 befasst sich mit den Aggregationsmethoden Der Schlussteil dieserArbeit endet mit einem Fazit

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 15

2 Technische Grundlagen

Das zweite Kapitel gibt einen Einblick in die Grundlagen von NoSQL-Datenbankenund Raspberry Pi

21 NoSQL-Definition

Bislang gibt es keine einheitliche und strikte Definition von NoSQL Den Versucheiner Definition haben die Autoren Edlich Friedland Hampe Brauer in ihrem Buch[12] vorgenommen Die besagt

bull Kein relationales DatenmodellEine Vielfaumlltigkeit der Modelle wird gefordert dies bedeutet dass das relatio-nale Modell nicht immer fuumlr jede Anforderung am besten geeignet ist Fuumlr Pro-jekte eignet sich die SWOT-Analyse (StrengthsStaumlrken WeaknessSchwauml-chen OpportunitiesChancen ThreatsBedrohungen) die analysiert welchesModell bzw Datenbanksystem infrage kommt [12]

bull Eignung fuumlr Systeme mit verteilter und horizontaler SkalierbarkeitRelationale Datenbanksysteme arbeiten in der Regel nachdem Scale-up Prin-zip bzw vertikale Skalierbarkeit in dem eine technische Aufruumlstung des Rech-ners stattfindet Im Gegensatz zu den relationalen Datenbanksysteme arbeitendie NoSQL-Datenbanksysteme oft nachdem Scale-out-Prinzip bzw horizon-tale Skalierbarkeit die eine schnellere Reaktionszeit auf Anfragen und Ma-nipulationen durch dynamisches Einbinden und Loumlschen von Rechnerknotenes ermoumlglichen Aufgrund einer vorhandenen Fehlertoleranz ist auch im vor-liegenden Fall ein Knotenfall ohne Konsequenz moumlglich Dadurch sinken dieAnschaffungskosten [12]

bull Quelloffene SoftwareDie meisten NoSQL-Datenbanksysteme sind quelloffen und koumlnnen dadurcheine Voraussetzung sein fuumlr eine SWOT-Analyse aber mit Sicherheit kein ent-scheidendes Argument [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 16

bull Frei von Schemen oder nur von schwaumlcheren Restriktionen betroffenDie Agilitaumlten der Datenstrukturen von Web20-Anwendungen muumlssen in derheutigen Zeit steigen Datenbanksysteme und Anwendungen muumlssen mit un-terschiedlich strukturierten Informationen im Web- und Dokumentbereich um-gehen koumlnnen Die Folge waumlre dass die Anwendung diese Schemainforma-tion zuruumlck verfolgen muumlsste Die Voraussetzung sind schnellere Reaktions-zeiten bei einer Schemaaumlnderung Schemaaumlnderungen koumlnnen nicht wie beiden relationalen Datenbanken ein System minuten- oder stundenlang auszligerBetrieb nehmen [12]

bull Einfache Datenreplikation zur Unterstuumltzung der verteilten ArchitekturDie Grundidee bei einer Datenreplikation ist die Verteilung der Daten auf meh-rere Knoten Es wird eine schnelle und einfache Datenreplikation gefordertdamit die Daten auch bei einem Kontenausfall noch vorhanden sind Die meis-ten NoSQL-Datenbanksysteme arbeiten damit erfolgreich Diese Vorausset-zung kommt zu Stande mit einer abgeschwaumlchten Konsistenzanforderung diein dem CAP-Theorem mit der Eigenschaft evenutally consistency vorhandenist Die Umsetzung erfolgt praktisch uumlber das BASE-Konsistenzmodell [12]

bull Einfache APISQL war sicherlich einfach deklarativ auch sehr ausdrucksstark und vor allemstandardisiert Der wesentlicher Nachteil bei vielen NoSQL-Datenbanksystemeist dass es zwar eine einfache API gibt aber nicht alle Funktionalitaumlten anbie-tet und somit nicht sehr bedeutsam Dadurch entsteht die Folge dass eineEntwicklung von Funktionalitaumlten fuumlr die Anwendung notwendig ist Zur Zeitentstehen neue Funktionalitaumlten die sich auch fuumlr Web20-Anwendungen eig-nen [12]

bull Kein ACID als KonsistenzmodellDie ACID-Eigenschaften verkomplizieren und verlangsamen die verteilte Da-tenhaltung und stellen somit ein Problem fuumlr NoSQL-Datenbanksysteme daDie Eigenschaft evenutally consistency ermoumlglicht den Ansatz dass Datenin den verschiedenen Knoten voruumlbergehend auch inkonsistent sein duumlrfenDieses Szenario kommt oft in den Internet-Anwendungen vor und nicht zumBeispiel sehr oft bei klassischen Geschaumlftsdaten in dem meistens relationaleDatenbanksysteme infrage kommen Es existieren auch Datenbanksystemedie sowohl mit ACID als auch mit BASE arbeiten koumlnnen [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 4: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

4

Danksagung

Ganz besonders moumlchte ich Herrn Prof Dr Baun herzlich danken fuumlr seine fachli-che und persoumlnliche Betreuung sowie fuumlr die Bereitstellung der technischen Mittelim Rahmen meiner Bachelorarbeit Auch moumlchte ich mich bei meinem Zweitkorrek-tor Prof Dr Gabel fuumlr die Annahme meiner Bachelorarbeit bedanken

Weiterhin bedanke ich mich bei meinen Eltern und Geschwistern die mir durchihre Unterstuumltzung mein Studium ermoumlglicht haben Mein Dank gilt ebenfalls mei-nen Freunden fuumlr die fachliche Ratschlaumlge und moralische Unterstuumltzung im Laufemeiner gesamten Studienzeit

5

Zusammenfassung

Ziel war es in der vorliegenden Bachelorarbeit einen eigenen Cluster mit der do-kumentenorientierten NoSQL-Datenbank MongoDB aufzubauen auf Basis von demEinplatinencomputer Raspberry Pi Die Server (Knoten) vom Cluster sollten mit der-selben Datenbank korrespondieren Raspberry Pi eignet sich fuumlr die Analyse und fuumlrden Aufbau eines eigenen Cluster Der Zusammenschluss mehrerer Geraumlte (Ras-pis) dieses Typs erfolgte uumlber ein Netzwerk

Dabei wurden die verteilten Funktionalitaumlten wie die Ausfallsicherheit und Parti-tionierung der Daten (Sklaierbarkeit) von der MongoDB untersucht Des weiterenwurden Vergleichungen von den Aggregationsmethoden durchgefuumlhrt Diese Ba-chelorarbeit ist sowohl fuumlr Informatiker als auch fuumlr Leute die sich mit Datenbank-technologien auseinandersetzen interessant

6

Abstract

The main goal of this thesis was to built up a cluster which is based on a document-oriented database called MongoDB and a single board computer Raspberry Pi Thenodes of the cluster should use the same database Raspberry Pi is suitable to ana-lyze and compose a cluster The composition of several devices (Raspis) was donevia a network

The following functionalties investigated Reliabitlity and Data partitioning on Mon-goDB Additionally comparisons were performed by aggregation methods This the-sis is interesting for computer scientists as well as for people who deal with databasetechnologies

Inhaltsverzeichnis 7

InhaltsverzeichnisEidesstattliche Erklaumlrung 3

Abbildungsverzeichnis 9

Tabellenverzeichnis 10

Abkuumlrzungsverzeichnis 11

1 Einleitung 1211 Aufbau 14

2 Technische Grundlagen 1521 NoSQL-Definition 1522 CAP-Theorem 1723 BASE 1824 NoSQL-Datenbanken-Vergleich 1825 MongoDB-Struktur 19

251 BSON 20252 ObjectID und Primaumlrschluumlssel 21253 Datentypen 22254 Collection 22255 CRUD 23

26 Raspberry Pi 24261 Raspberry Pi 3 Modell B 25

3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank Mon-goDB auf Basis von Raspberry Pi Einplatinencomputern 2631 Hardware- und Softwarekomponenten 2632 Installation und Konfiguration 27

321 Raspberry Pi Installation 27322 Raspberry Pi Konfiguration 28323 MongoDB Installation 33324 MongoDB Konfiguration 34

4 MongoDB 3741 Grundlagen 37

411 MongoDB-Dienst Starten 3742 Replikation 38

421 Oplog 38422 Master-Slave-Replikation 38423 Replica Sets 38424 Replication uumlber ein Raspberry Pi-Cluster 39

43 Vertikale und Horizontale Skalierung 44431 Vertikale Sklalierung 44432 Horizontale Sklalierung 44

44 Sharding 45441 Sharding uumlber ein Raspberry Pi-Cluster 45

Inhaltsverzeichnis 8

5 Untersuchung der Aggregationsmethoden 4951 Grafische Benutzeroberflaumlche fuumlr MongoDB 4952 Aggregation von Daten 49

521 Einfache Abfragemethoden zur Datenaggregation 50522 Aggregation Pipeline 51523 MapReduce 52

6 Fazit 54

Abbildungsverzeichnis 9

Abbildungsverzeichnis1 Veranschaulichung des CAP-Theorems 172 MongoDB-Struktur 193 ObjectID-Beispiel 214 Raspberry Pi 3 Modell B 255 Aufbau eines Clusters 276 Win32 Disk Manager 287 Menuuml des Konfigurations-Tool raspi-config 288 Programm Fing 309 Datei etcdhcpdconf 3010 PuTTY 3111 Anmeldung per Remotedesktopverbindung 3212 Grafische Oberflaumlche von Raspbian 3213 MongoDB-Dienstdatei 3614 Ablauf von Replica Sets 3815 Mitglieder von Replica Set 3916 Ausfall des Primaumlrservers 4017 Wiederaktiverung des Servers p101 4018 Status des Replica Sets 4119 Status des Replica Set uumlber HTTP-Interface 4120 JavaScript-Befehl rsconf() 4221 Prioritaumltenvergabe 4322 Lesezugriff durch Sekundaumlrserver 4323 Vertikale und Horizontale Skalierung 4424 Erstellung einer Sharding-Umgebung 4725 Sharding-Umgebung 4726 Aufteilung der Shards 4827 Robomongo 4928 Aggregationsmethode count() 5029 Aggregationsmethode distinct() 5030 Aggregationsmethode group() 5131 Aggregation Pipeline 5232 MapReduce 5233 Ergebnisanzeige der Aggregation 53

Tabellenverzeichnis 10

Tabellenverzeichnis1 NoSQL-Anbieter 192 Datenypen 223 System Collections 234 CRUD-Operationen 235 Technische Daten vom Raspberry Pi 3 Model B 256 Konfigurationsdatei mongodbconf 377 Replication-Umgebung 398 Sharding-Umgebung 469 Parameter bei group() 5010 Pipeline-Operationen 51

Tabellenverzeichnis 11

AbkuumlrzungsverzeichnisRaspis Mehrere Geraumlte von Raspberry PiSEQUEL Structured English QUEred LanguageSQL Structured Query LanguageDDL Data Definition LanguageIBM International Business Machines CorporationGPS Global Positioning SystemNoSQL Not Only Structured Query LanguageMongoDB Mongo DatenbankSWOT Strengths Weaknesses Opportunities ThreatsBASE Basically Available Soft State Eventual consistencyFIFO First In - First OutSD Secure DigitalUSB Universal Serial BUSSSH Secure ShellGPIOS General-purpose inputoutputCRUD Create Read Update DeleteJSON JavaScript Object NotationBSON Binary JSONID IdentifikatorCPU Central Processing UnitGPU Graphics Processing UnitDHCP Dynamic Host Configuration ProtocolIP InternetprotokollAPT Advanced Packaging ToolTCP Transmission Control ProtocolHTTP Hypertext Transfer Protocol

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 12

1 Einleitung

Edgar Frank Codd gelingt es in den 1960er und 1970er Jahren ein groszliger Fortschrittmit der Entwicklung von den ersten relationalen Datenbanksystemen [1] In dieserZeit haben relationale Datenbanken immer mehr an Bedeutung gewonnen So ent-stand auch in den 1970er auch die Datenbanksprache SEQUEL (Structured EnglishQUEred Language) basierend auf den relationalen Datenbanken Spaumlter wurde je-doch die Sprache unbenannt in SQL (Structured Query Language) [2]

SQL und relationale Datenbanken arbeiten nach festen Tabellenschemen Einer derSprachelemente vom SQL ist Data Definition Language (DDL) DDL gibt vor zuerstdie Tabelle zu erstellen und nachtraumlglich gibt es die Moumlglichkeit auch Spalten undDatentypen zu erzeugen [3] Die Flexibilitaumlt von dem oben aufgefuumlhrten Schema istbegrenzt Die Menge der Datenmenge ist uumlber die Zeit stetig gewachsen Laut IBMentstehen jeden Tag um die 25 Trillionen Byte an Daten Das heiszligt dass 90 derDaten aus den letzten 2 Jahren entstanden sind Die groszligen Datenmengen entste-hen aus allen Bereichen wie zum Beispiel aus dem Internetbereich GPS-Technikund Sensortechnik [4] Dies fuumlhrt oft dazu dass Datenbankmanagementsystemeund Hardware an ihre Grenzen stoszligen Bewaumlltigung dieser groszligen Datenmengenstellten fuumlr Entwickler neue Herausforderungen Somit entstanden neue NoSQL-Technologien Dies war ein Einstieg fuumlr die Entwicklung von Google MapReduceund Hadoop von Yahoo [5] Diese damals neuen Technologien verarbeiteten besserdie groszligen Datenmengen als zuvor somit war es ein wichtiger Fortschritt [5] DieNoSQL-Welt spielt heute wesentlich eine groszlige Rolle fuumlr die Datenverarbeitung vonBig Data Somit ist der Begriff NoSQL nicht mehr wegzudenken aus der Datenbank-welt

NoSQL ist eine Abkuumlrzung fuumlr Not only SQL (nicht immer nur SQL) Dies be-deutet nicht dass man auf SQL bzw relationaler Datenbank verzichtet sondernauch Alternativen einbezieht zur SQL-Welt [6] NoSQL-Implementierungen sind inmehrere Kategorien unterteilt [6] die in dieser Bachelorarbeit naumlher erklaumlrt werdenMeistens werden groszlige Datenmengen schneller verarbeitet als im Gegensatz zurelationalen Datenbanken Immer mehr NoSQL-Datenbanken verbreiten sich Zur-zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7] Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank MongoDB Es handelt hierbei um eine quelloffene Software MongoDBverwendet fuumlr die Implementierung der Datenbank die Programmiersprache C++[8] Zudem gibt es zahlreiche Mongo-DB-Treiber die in den ProgrammiersprachenC C++ Java Ruby Phyton und PHP zu Verfuumlgung stehen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 13

Viele bekannte Groszligunternehmen wie Facebook Google Expedia und Bosch be-nutzen zurzeit MongoDB [9]

Der Begriff Mongo leitet sich vom englischen Wort humongous was uumlbersetzt be-deutet gigantisch oder wahnsinnig groszlig es wird auf den Volumen Aspekt vonBig Data hingedeutet [10] Zurzeit besteht keine exakte Definition fuumlr Big Data DasSoftwareunternehmen 10gen entwickelte im Jahr 2007 die erste Version von Mon-goDB Im Jahre 2013 kam es auch zu einer Namensaumlnderung des Softwareunter-nehmens die sich ebenfalls in MongoDB umbenannte Neben dem Volumen Aspektsind noch zwei weitere Velocity und Variety Aspekte vorhanden Besonders fuumlr dieBig-Data-Aspekte Volume und Velocity empfiehlt sich die Verwendung von verteiltenSystemen Der Begriff Big Data entstand im Jahr 2001 von Doug Laney (damaligenAnalysten der Meta Group) Laney definierte Big Data als Daten mit groszligem Volu-men (Volume) groszliger Vielfalt an Datenformaten (Variety) und groszligen Geschwin-digkeit (Velocity) mit der neue Daten entstehen [11]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 14

11 Aufbau

Die Bachelorarbeit gliedert sich in sechs Teilen Auf die Einleitung folgend widmetsich der zweite Teil mit der Entstehung und den Grundlagen von Raspberry Pi undMongoDB Weiterhin befasst sich das dritte Kapitel mit dem Aufbau InstallationKonfiguration und den dazugehoumlrigen Hardware- und Softwarekomponenten

Im Mittelpunkt des vierten Kapitels steht die Implementierung der Datenreplikationund Datenfragmentierung innerhalb eines Clusters Es werden hier die Funktionali-taumlten eines Cluster ausgefuumlhrt und ausgewertet

Das Kapitel 5 befasst sich mit den Aggregationsmethoden Der Schlussteil dieserArbeit endet mit einem Fazit

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 15

2 Technische Grundlagen

Das zweite Kapitel gibt einen Einblick in die Grundlagen von NoSQL-Datenbankenund Raspberry Pi

21 NoSQL-Definition

Bislang gibt es keine einheitliche und strikte Definition von NoSQL Den Versucheiner Definition haben die Autoren Edlich Friedland Hampe Brauer in ihrem Buch[12] vorgenommen Die besagt

bull Kein relationales DatenmodellEine Vielfaumlltigkeit der Modelle wird gefordert dies bedeutet dass das relatio-nale Modell nicht immer fuumlr jede Anforderung am besten geeignet ist Fuumlr Pro-jekte eignet sich die SWOT-Analyse (StrengthsStaumlrken WeaknessSchwauml-chen OpportunitiesChancen ThreatsBedrohungen) die analysiert welchesModell bzw Datenbanksystem infrage kommt [12]

bull Eignung fuumlr Systeme mit verteilter und horizontaler SkalierbarkeitRelationale Datenbanksysteme arbeiten in der Regel nachdem Scale-up Prin-zip bzw vertikale Skalierbarkeit in dem eine technische Aufruumlstung des Rech-ners stattfindet Im Gegensatz zu den relationalen Datenbanksysteme arbeitendie NoSQL-Datenbanksysteme oft nachdem Scale-out-Prinzip bzw horizon-tale Skalierbarkeit die eine schnellere Reaktionszeit auf Anfragen und Ma-nipulationen durch dynamisches Einbinden und Loumlschen von Rechnerknotenes ermoumlglichen Aufgrund einer vorhandenen Fehlertoleranz ist auch im vor-liegenden Fall ein Knotenfall ohne Konsequenz moumlglich Dadurch sinken dieAnschaffungskosten [12]

bull Quelloffene SoftwareDie meisten NoSQL-Datenbanksysteme sind quelloffen und koumlnnen dadurcheine Voraussetzung sein fuumlr eine SWOT-Analyse aber mit Sicherheit kein ent-scheidendes Argument [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 16

bull Frei von Schemen oder nur von schwaumlcheren Restriktionen betroffenDie Agilitaumlten der Datenstrukturen von Web20-Anwendungen muumlssen in derheutigen Zeit steigen Datenbanksysteme und Anwendungen muumlssen mit un-terschiedlich strukturierten Informationen im Web- und Dokumentbereich um-gehen koumlnnen Die Folge waumlre dass die Anwendung diese Schemainforma-tion zuruumlck verfolgen muumlsste Die Voraussetzung sind schnellere Reaktions-zeiten bei einer Schemaaumlnderung Schemaaumlnderungen koumlnnen nicht wie beiden relationalen Datenbanken ein System minuten- oder stundenlang auszligerBetrieb nehmen [12]

bull Einfache Datenreplikation zur Unterstuumltzung der verteilten ArchitekturDie Grundidee bei einer Datenreplikation ist die Verteilung der Daten auf meh-rere Knoten Es wird eine schnelle und einfache Datenreplikation gefordertdamit die Daten auch bei einem Kontenausfall noch vorhanden sind Die meis-ten NoSQL-Datenbanksysteme arbeiten damit erfolgreich Diese Vorausset-zung kommt zu Stande mit einer abgeschwaumlchten Konsistenzanforderung diein dem CAP-Theorem mit der Eigenschaft evenutally consistency vorhandenist Die Umsetzung erfolgt praktisch uumlber das BASE-Konsistenzmodell [12]

bull Einfache APISQL war sicherlich einfach deklarativ auch sehr ausdrucksstark und vor allemstandardisiert Der wesentlicher Nachteil bei vielen NoSQL-Datenbanksystemeist dass es zwar eine einfache API gibt aber nicht alle Funktionalitaumlten anbie-tet und somit nicht sehr bedeutsam Dadurch entsteht die Folge dass eineEntwicklung von Funktionalitaumlten fuumlr die Anwendung notwendig ist Zur Zeitentstehen neue Funktionalitaumlten die sich auch fuumlr Web20-Anwendungen eig-nen [12]

bull Kein ACID als KonsistenzmodellDie ACID-Eigenschaften verkomplizieren und verlangsamen die verteilte Da-tenhaltung und stellen somit ein Problem fuumlr NoSQL-Datenbanksysteme daDie Eigenschaft evenutally consistency ermoumlglicht den Ansatz dass Datenin den verschiedenen Knoten voruumlbergehend auch inkonsistent sein duumlrfenDieses Szenario kommt oft in den Internet-Anwendungen vor und nicht zumBeispiel sehr oft bei klassischen Geschaumlftsdaten in dem meistens relationaleDatenbanksysteme infrage kommen Es existieren auch Datenbanksystemedie sowohl mit ACID als auch mit BASE arbeiten koumlnnen [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 5: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

5

Zusammenfassung

Ziel war es in der vorliegenden Bachelorarbeit einen eigenen Cluster mit der do-kumentenorientierten NoSQL-Datenbank MongoDB aufzubauen auf Basis von demEinplatinencomputer Raspberry Pi Die Server (Knoten) vom Cluster sollten mit der-selben Datenbank korrespondieren Raspberry Pi eignet sich fuumlr die Analyse und fuumlrden Aufbau eines eigenen Cluster Der Zusammenschluss mehrerer Geraumlte (Ras-pis) dieses Typs erfolgte uumlber ein Netzwerk

Dabei wurden die verteilten Funktionalitaumlten wie die Ausfallsicherheit und Parti-tionierung der Daten (Sklaierbarkeit) von der MongoDB untersucht Des weiterenwurden Vergleichungen von den Aggregationsmethoden durchgefuumlhrt Diese Ba-chelorarbeit ist sowohl fuumlr Informatiker als auch fuumlr Leute die sich mit Datenbank-technologien auseinandersetzen interessant

6

Abstract

The main goal of this thesis was to built up a cluster which is based on a document-oriented database called MongoDB and a single board computer Raspberry Pi Thenodes of the cluster should use the same database Raspberry Pi is suitable to ana-lyze and compose a cluster The composition of several devices (Raspis) was donevia a network

The following functionalties investigated Reliabitlity and Data partitioning on Mon-goDB Additionally comparisons were performed by aggregation methods This the-sis is interesting for computer scientists as well as for people who deal with databasetechnologies

Inhaltsverzeichnis 7

InhaltsverzeichnisEidesstattliche Erklaumlrung 3

Abbildungsverzeichnis 9

Tabellenverzeichnis 10

Abkuumlrzungsverzeichnis 11

1 Einleitung 1211 Aufbau 14

2 Technische Grundlagen 1521 NoSQL-Definition 1522 CAP-Theorem 1723 BASE 1824 NoSQL-Datenbanken-Vergleich 1825 MongoDB-Struktur 19

251 BSON 20252 ObjectID und Primaumlrschluumlssel 21253 Datentypen 22254 Collection 22255 CRUD 23

26 Raspberry Pi 24261 Raspberry Pi 3 Modell B 25

3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank Mon-goDB auf Basis von Raspberry Pi Einplatinencomputern 2631 Hardware- und Softwarekomponenten 2632 Installation und Konfiguration 27

321 Raspberry Pi Installation 27322 Raspberry Pi Konfiguration 28323 MongoDB Installation 33324 MongoDB Konfiguration 34

4 MongoDB 3741 Grundlagen 37

411 MongoDB-Dienst Starten 3742 Replikation 38

421 Oplog 38422 Master-Slave-Replikation 38423 Replica Sets 38424 Replication uumlber ein Raspberry Pi-Cluster 39

43 Vertikale und Horizontale Skalierung 44431 Vertikale Sklalierung 44432 Horizontale Sklalierung 44

44 Sharding 45441 Sharding uumlber ein Raspberry Pi-Cluster 45

Inhaltsverzeichnis 8

5 Untersuchung der Aggregationsmethoden 4951 Grafische Benutzeroberflaumlche fuumlr MongoDB 4952 Aggregation von Daten 49

521 Einfache Abfragemethoden zur Datenaggregation 50522 Aggregation Pipeline 51523 MapReduce 52

6 Fazit 54

Abbildungsverzeichnis 9

Abbildungsverzeichnis1 Veranschaulichung des CAP-Theorems 172 MongoDB-Struktur 193 ObjectID-Beispiel 214 Raspberry Pi 3 Modell B 255 Aufbau eines Clusters 276 Win32 Disk Manager 287 Menuuml des Konfigurations-Tool raspi-config 288 Programm Fing 309 Datei etcdhcpdconf 3010 PuTTY 3111 Anmeldung per Remotedesktopverbindung 3212 Grafische Oberflaumlche von Raspbian 3213 MongoDB-Dienstdatei 3614 Ablauf von Replica Sets 3815 Mitglieder von Replica Set 3916 Ausfall des Primaumlrservers 4017 Wiederaktiverung des Servers p101 4018 Status des Replica Sets 4119 Status des Replica Set uumlber HTTP-Interface 4120 JavaScript-Befehl rsconf() 4221 Prioritaumltenvergabe 4322 Lesezugriff durch Sekundaumlrserver 4323 Vertikale und Horizontale Skalierung 4424 Erstellung einer Sharding-Umgebung 4725 Sharding-Umgebung 4726 Aufteilung der Shards 4827 Robomongo 4928 Aggregationsmethode count() 5029 Aggregationsmethode distinct() 5030 Aggregationsmethode group() 5131 Aggregation Pipeline 5232 MapReduce 5233 Ergebnisanzeige der Aggregation 53

Tabellenverzeichnis 10

Tabellenverzeichnis1 NoSQL-Anbieter 192 Datenypen 223 System Collections 234 CRUD-Operationen 235 Technische Daten vom Raspberry Pi 3 Model B 256 Konfigurationsdatei mongodbconf 377 Replication-Umgebung 398 Sharding-Umgebung 469 Parameter bei group() 5010 Pipeline-Operationen 51

Tabellenverzeichnis 11

AbkuumlrzungsverzeichnisRaspis Mehrere Geraumlte von Raspberry PiSEQUEL Structured English QUEred LanguageSQL Structured Query LanguageDDL Data Definition LanguageIBM International Business Machines CorporationGPS Global Positioning SystemNoSQL Not Only Structured Query LanguageMongoDB Mongo DatenbankSWOT Strengths Weaknesses Opportunities ThreatsBASE Basically Available Soft State Eventual consistencyFIFO First In - First OutSD Secure DigitalUSB Universal Serial BUSSSH Secure ShellGPIOS General-purpose inputoutputCRUD Create Read Update DeleteJSON JavaScript Object NotationBSON Binary JSONID IdentifikatorCPU Central Processing UnitGPU Graphics Processing UnitDHCP Dynamic Host Configuration ProtocolIP InternetprotokollAPT Advanced Packaging ToolTCP Transmission Control ProtocolHTTP Hypertext Transfer Protocol

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 12

1 Einleitung

Edgar Frank Codd gelingt es in den 1960er und 1970er Jahren ein groszliger Fortschrittmit der Entwicklung von den ersten relationalen Datenbanksystemen [1] In dieserZeit haben relationale Datenbanken immer mehr an Bedeutung gewonnen So ent-stand auch in den 1970er auch die Datenbanksprache SEQUEL (Structured EnglishQUEred Language) basierend auf den relationalen Datenbanken Spaumlter wurde je-doch die Sprache unbenannt in SQL (Structured Query Language) [2]

SQL und relationale Datenbanken arbeiten nach festen Tabellenschemen Einer derSprachelemente vom SQL ist Data Definition Language (DDL) DDL gibt vor zuerstdie Tabelle zu erstellen und nachtraumlglich gibt es die Moumlglichkeit auch Spalten undDatentypen zu erzeugen [3] Die Flexibilitaumlt von dem oben aufgefuumlhrten Schema istbegrenzt Die Menge der Datenmenge ist uumlber die Zeit stetig gewachsen Laut IBMentstehen jeden Tag um die 25 Trillionen Byte an Daten Das heiszligt dass 90 derDaten aus den letzten 2 Jahren entstanden sind Die groszligen Datenmengen entste-hen aus allen Bereichen wie zum Beispiel aus dem Internetbereich GPS-Technikund Sensortechnik [4] Dies fuumlhrt oft dazu dass Datenbankmanagementsystemeund Hardware an ihre Grenzen stoszligen Bewaumlltigung dieser groszligen Datenmengenstellten fuumlr Entwickler neue Herausforderungen Somit entstanden neue NoSQL-Technologien Dies war ein Einstieg fuumlr die Entwicklung von Google MapReduceund Hadoop von Yahoo [5] Diese damals neuen Technologien verarbeiteten besserdie groszligen Datenmengen als zuvor somit war es ein wichtiger Fortschritt [5] DieNoSQL-Welt spielt heute wesentlich eine groszlige Rolle fuumlr die Datenverarbeitung vonBig Data Somit ist der Begriff NoSQL nicht mehr wegzudenken aus der Datenbank-welt

NoSQL ist eine Abkuumlrzung fuumlr Not only SQL (nicht immer nur SQL) Dies be-deutet nicht dass man auf SQL bzw relationaler Datenbank verzichtet sondernauch Alternativen einbezieht zur SQL-Welt [6] NoSQL-Implementierungen sind inmehrere Kategorien unterteilt [6] die in dieser Bachelorarbeit naumlher erklaumlrt werdenMeistens werden groszlige Datenmengen schneller verarbeitet als im Gegensatz zurelationalen Datenbanken Immer mehr NoSQL-Datenbanken verbreiten sich Zur-zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7] Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank MongoDB Es handelt hierbei um eine quelloffene Software MongoDBverwendet fuumlr die Implementierung der Datenbank die Programmiersprache C++[8] Zudem gibt es zahlreiche Mongo-DB-Treiber die in den ProgrammiersprachenC C++ Java Ruby Phyton und PHP zu Verfuumlgung stehen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 13

Viele bekannte Groszligunternehmen wie Facebook Google Expedia und Bosch be-nutzen zurzeit MongoDB [9]

Der Begriff Mongo leitet sich vom englischen Wort humongous was uumlbersetzt be-deutet gigantisch oder wahnsinnig groszlig es wird auf den Volumen Aspekt vonBig Data hingedeutet [10] Zurzeit besteht keine exakte Definition fuumlr Big Data DasSoftwareunternehmen 10gen entwickelte im Jahr 2007 die erste Version von Mon-goDB Im Jahre 2013 kam es auch zu einer Namensaumlnderung des Softwareunter-nehmens die sich ebenfalls in MongoDB umbenannte Neben dem Volumen Aspektsind noch zwei weitere Velocity und Variety Aspekte vorhanden Besonders fuumlr dieBig-Data-Aspekte Volume und Velocity empfiehlt sich die Verwendung von verteiltenSystemen Der Begriff Big Data entstand im Jahr 2001 von Doug Laney (damaligenAnalysten der Meta Group) Laney definierte Big Data als Daten mit groszligem Volu-men (Volume) groszliger Vielfalt an Datenformaten (Variety) und groszligen Geschwin-digkeit (Velocity) mit der neue Daten entstehen [11]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 14

11 Aufbau

Die Bachelorarbeit gliedert sich in sechs Teilen Auf die Einleitung folgend widmetsich der zweite Teil mit der Entstehung und den Grundlagen von Raspberry Pi undMongoDB Weiterhin befasst sich das dritte Kapitel mit dem Aufbau InstallationKonfiguration und den dazugehoumlrigen Hardware- und Softwarekomponenten

Im Mittelpunkt des vierten Kapitels steht die Implementierung der Datenreplikationund Datenfragmentierung innerhalb eines Clusters Es werden hier die Funktionali-taumlten eines Cluster ausgefuumlhrt und ausgewertet

Das Kapitel 5 befasst sich mit den Aggregationsmethoden Der Schlussteil dieserArbeit endet mit einem Fazit

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 15

2 Technische Grundlagen

Das zweite Kapitel gibt einen Einblick in die Grundlagen von NoSQL-Datenbankenund Raspberry Pi

21 NoSQL-Definition

Bislang gibt es keine einheitliche und strikte Definition von NoSQL Den Versucheiner Definition haben die Autoren Edlich Friedland Hampe Brauer in ihrem Buch[12] vorgenommen Die besagt

bull Kein relationales DatenmodellEine Vielfaumlltigkeit der Modelle wird gefordert dies bedeutet dass das relatio-nale Modell nicht immer fuumlr jede Anforderung am besten geeignet ist Fuumlr Pro-jekte eignet sich die SWOT-Analyse (StrengthsStaumlrken WeaknessSchwauml-chen OpportunitiesChancen ThreatsBedrohungen) die analysiert welchesModell bzw Datenbanksystem infrage kommt [12]

bull Eignung fuumlr Systeme mit verteilter und horizontaler SkalierbarkeitRelationale Datenbanksysteme arbeiten in der Regel nachdem Scale-up Prin-zip bzw vertikale Skalierbarkeit in dem eine technische Aufruumlstung des Rech-ners stattfindet Im Gegensatz zu den relationalen Datenbanksysteme arbeitendie NoSQL-Datenbanksysteme oft nachdem Scale-out-Prinzip bzw horizon-tale Skalierbarkeit die eine schnellere Reaktionszeit auf Anfragen und Ma-nipulationen durch dynamisches Einbinden und Loumlschen von Rechnerknotenes ermoumlglichen Aufgrund einer vorhandenen Fehlertoleranz ist auch im vor-liegenden Fall ein Knotenfall ohne Konsequenz moumlglich Dadurch sinken dieAnschaffungskosten [12]

bull Quelloffene SoftwareDie meisten NoSQL-Datenbanksysteme sind quelloffen und koumlnnen dadurcheine Voraussetzung sein fuumlr eine SWOT-Analyse aber mit Sicherheit kein ent-scheidendes Argument [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 16

bull Frei von Schemen oder nur von schwaumlcheren Restriktionen betroffenDie Agilitaumlten der Datenstrukturen von Web20-Anwendungen muumlssen in derheutigen Zeit steigen Datenbanksysteme und Anwendungen muumlssen mit un-terschiedlich strukturierten Informationen im Web- und Dokumentbereich um-gehen koumlnnen Die Folge waumlre dass die Anwendung diese Schemainforma-tion zuruumlck verfolgen muumlsste Die Voraussetzung sind schnellere Reaktions-zeiten bei einer Schemaaumlnderung Schemaaumlnderungen koumlnnen nicht wie beiden relationalen Datenbanken ein System minuten- oder stundenlang auszligerBetrieb nehmen [12]

bull Einfache Datenreplikation zur Unterstuumltzung der verteilten ArchitekturDie Grundidee bei einer Datenreplikation ist die Verteilung der Daten auf meh-rere Knoten Es wird eine schnelle und einfache Datenreplikation gefordertdamit die Daten auch bei einem Kontenausfall noch vorhanden sind Die meis-ten NoSQL-Datenbanksysteme arbeiten damit erfolgreich Diese Vorausset-zung kommt zu Stande mit einer abgeschwaumlchten Konsistenzanforderung diein dem CAP-Theorem mit der Eigenschaft evenutally consistency vorhandenist Die Umsetzung erfolgt praktisch uumlber das BASE-Konsistenzmodell [12]

bull Einfache APISQL war sicherlich einfach deklarativ auch sehr ausdrucksstark und vor allemstandardisiert Der wesentlicher Nachteil bei vielen NoSQL-Datenbanksystemeist dass es zwar eine einfache API gibt aber nicht alle Funktionalitaumlten anbie-tet und somit nicht sehr bedeutsam Dadurch entsteht die Folge dass eineEntwicklung von Funktionalitaumlten fuumlr die Anwendung notwendig ist Zur Zeitentstehen neue Funktionalitaumlten die sich auch fuumlr Web20-Anwendungen eig-nen [12]

bull Kein ACID als KonsistenzmodellDie ACID-Eigenschaften verkomplizieren und verlangsamen die verteilte Da-tenhaltung und stellen somit ein Problem fuumlr NoSQL-Datenbanksysteme daDie Eigenschaft evenutally consistency ermoumlglicht den Ansatz dass Datenin den verschiedenen Knoten voruumlbergehend auch inkonsistent sein duumlrfenDieses Szenario kommt oft in den Internet-Anwendungen vor und nicht zumBeispiel sehr oft bei klassischen Geschaumlftsdaten in dem meistens relationaleDatenbanksysteme infrage kommen Es existieren auch Datenbanksystemedie sowohl mit ACID als auch mit BASE arbeiten koumlnnen [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 6: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

6

Abstract

The main goal of this thesis was to built up a cluster which is based on a document-oriented database called MongoDB and a single board computer Raspberry Pi Thenodes of the cluster should use the same database Raspberry Pi is suitable to ana-lyze and compose a cluster The composition of several devices (Raspis) was donevia a network

The following functionalties investigated Reliabitlity and Data partitioning on Mon-goDB Additionally comparisons were performed by aggregation methods This the-sis is interesting for computer scientists as well as for people who deal with databasetechnologies

Inhaltsverzeichnis 7

InhaltsverzeichnisEidesstattliche Erklaumlrung 3

Abbildungsverzeichnis 9

Tabellenverzeichnis 10

Abkuumlrzungsverzeichnis 11

1 Einleitung 1211 Aufbau 14

2 Technische Grundlagen 1521 NoSQL-Definition 1522 CAP-Theorem 1723 BASE 1824 NoSQL-Datenbanken-Vergleich 1825 MongoDB-Struktur 19

251 BSON 20252 ObjectID und Primaumlrschluumlssel 21253 Datentypen 22254 Collection 22255 CRUD 23

26 Raspberry Pi 24261 Raspberry Pi 3 Modell B 25

3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank Mon-goDB auf Basis von Raspberry Pi Einplatinencomputern 2631 Hardware- und Softwarekomponenten 2632 Installation und Konfiguration 27

321 Raspberry Pi Installation 27322 Raspberry Pi Konfiguration 28323 MongoDB Installation 33324 MongoDB Konfiguration 34

4 MongoDB 3741 Grundlagen 37

411 MongoDB-Dienst Starten 3742 Replikation 38

421 Oplog 38422 Master-Slave-Replikation 38423 Replica Sets 38424 Replication uumlber ein Raspberry Pi-Cluster 39

43 Vertikale und Horizontale Skalierung 44431 Vertikale Sklalierung 44432 Horizontale Sklalierung 44

44 Sharding 45441 Sharding uumlber ein Raspberry Pi-Cluster 45

Inhaltsverzeichnis 8

5 Untersuchung der Aggregationsmethoden 4951 Grafische Benutzeroberflaumlche fuumlr MongoDB 4952 Aggregation von Daten 49

521 Einfache Abfragemethoden zur Datenaggregation 50522 Aggregation Pipeline 51523 MapReduce 52

6 Fazit 54

Abbildungsverzeichnis 9

Abbildungsverzeichnis1 Veranschaulichung des CAP-Theorems 172 MongoDB-Struktur 193 ObjectID-Beispiel 214 Raspberry Pi 3 Modell B 255 Aufbau eines Clusters 276 Win32 Disk Manager 287 Menuuml des Konfigurations-Tool raspi-config 288 Programm Fing 309 Datei etcdhcpdconf 3010 PuTTY 3111 Anmeldung per Remotedesktopverbindung 3212 Grafische Oberflaumlche von Raspbian 3213 MongoDB-Dienstdatei 3614 Ablauf von Replica Sets 3815 Mitglieder von Replica Set 3916 Ausfall des Primaumlrservers 4017 Wiederaktiverung des Servers p101 4018 Status des Replica Sets 4119 Status des Replica Set uumlber HTTP-Interface 4120 JavaScript-Befehl rsconf() 4221 Prioritaumltenvergabe 4322 Lesezugriff durch Sekundaumlrserver 4323 Vertikale und Horizontale Skalierung 4424 Erstellung einer Sharding-Umgebung 4725 Sharding-Umgebung 4726 Aufteilung der Shards 4827 Robomongo 4928 Aggregationsmethode count() 5029 Aggregationsmethode distinct() 5030 Aggregationsmethode group() 5131 Aggregation Pipeline 5232 MapReduce 5233 Ergebnisanzeige der Aggregation 53

Tabellenverzeichnis 10

Tabellenverzeichnis1 NoSQL-Anbieter 192 Datenypen 223 System Collections 234 CRUD-Operationen 235 Technische Daten vom Raspberry Pi 3 Model B 256 Konfigurationsdatei mongodbconf 377 Replication-Umgebung 398 Sharding-Umgebung 469 Parameter bei group() 5010 Pipeline-Operationen 51

Tabellenverzeichnis 11

AbkuumlrzungsverzeichnisRaspis Mehrere Geraumlte von Raspberry PiSEQUEL Structured English QUEred LanguageSQL Structured Query LanguageDDL Data Definition LanguageIBM International Business Machines CorporationGPS Global Positioning SystemNoSQL Not Only Structured Query LanguageMongoDB Mongo DatenbankSWOT Strengths Weaknesses Opportunities ThreatsBASE Basically Available Soft State Eventual consistencyFIFO First In - First OutSD Secure DigitalUSB Universal Serial BUSSSH Secure ShellGPIOS General-purpose inputoutputCRUD Create Read Update DeleteJSON JavaScript Object NotationBSON Binary JSONID IdentifikatorCPU Central Processing UnitGPU Graphics Processing UnitDHCP Dynamic Host Configuration ProtocolIP InternetprotokollAPT Advanced Packaging ToolTCP Transmission Control ProtocolHTTP Hypertext Transfer Protocol

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 12

1 Einleitung

Edgar Frank Codd gelingt es in den 1960er und 1970er Jahren ein groszliger Fortschrittmit der Entwicklung von den ersten relationalen Datenbanksystemen [1] In dieserZeit haben relationale Datenbanken immer mehr an Bedeutung gewonnen So ent-stand auch in den 1970er auch die Datenbanksprache SEQUEL (Structured EnglishQUEred Language) basierend auf den relationalen Datenbanken Spaumlter wurde je-doch die Sprache unbenannt in SQL (Structured Query Language) [2]

SQL und relationale Datenbanken arbeiten nach festen Tabellenschemen Einer derSprachelemente vom SQL ist Data Definition Language (DDL) DDL gibt vor zuerstdie Tabelle zu erstellen und nachtraumlglich gibt es die Moumlglichkeit auch Spalten undDatentypen zu erzeugen [3] Die Flexibilitaumlt von dem oben aufgefuumlhrten Schema istbegrenzt Die Menge der Datenmenge ist uumlber die Zeit stetig gewachsen Laut IBMentstehen jeden Tag um die 25 Trillionen Byte an Daten Das heiszligt dass 90 derDaten aus den letzten 2 Jahren entstanden sind Die groszligen Datenmengen entste-hen aus allen Bereichen wie zum Beispiel aus dem Internetbereich GPS-Technikund Sensortechnik [4] Dies fuumlhrt oft dazu dass Datenbankmanagementsystemeund Hardware an ihre Grenzen stoszligen Bewaumlltigung dieser groszligen Datenmengenstellten fuumlr Entwickler neue Herausforderungen Somit entstanden neue NoSQL-Technologien Dies war ein Einstieg fuumlr die Entwicklung von Google MapReduceund Hadoop von Yahoo [5] Diese damals neuen Technologien verarbeiteten besserdie groszligen Datenmengen als zuvor somit war es ein wichtiger Fortschritt [5] DieNoSQL-Welt spielt heute wesentlich eine groszlige Rolle fuumlr die Datenverarbeitung vonBig Data Somit ist der Begriff NoSQL nicht mehr wegzudenken aus der Datenbank-welt

NoSQL ist eine Abkuumlrzung fuumlr Not only SQL (nicht immer nur SQL) Dies be-deutet nicht dass man auf SQL bzw relationaler Datenbank verzichtet sondernauch Alternativen einbezieht zur SQL-Welt [6] NoSQL-Implementierungen sind inmehrere Kategorien unterteilt [6] die in dieser Bachelorarbeit naumlher erklaumlrt werdenMeistens werden groszlige Datenmengen schneller verarbeitet als im Gegensatz zurelationalen Datenbanken Immer mehr NoSQL-Datenbanken verbreiten sich Zur-zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7] Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank MongoDB Es handelt hierbei um eine quelloffene Software MongoDBverwendet fuumlr die Implementierung der Datenbank die Programmiersprache C++[8] Zudem gibt es zahlreiche Mongo-DB-Treiber die in den ProgrammiersprachenC C++ Java Ruby Phyton und PHP zu Verfuumlgung stehen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 13

Viele bekannte Groszligunternehmen wie Facebook Google Expedia und Bosch be-nutzen zurzeit MongoDB [9]

Der Begriff Mongo leitet sich vom englischen Wort humongous was uumlbersetzt be-deutet gigantisch oder wahnsinnig groszlig es wird auf den Volumen Aspekt vonBig Data hingedeutet [10] Zurzeit besteht keine exakte Definition fuumlr Big Data DasSoftwareunternehmen 10gen entwickelte im Jahr 2007 die erste Version von Mon-goDB Im Jahre 2013 kam es auch zu einer Namensaumlnderung des Softwareunter-nehmens die sich ebenfalls in MongoDB umbenannte Neben dem Volumen Aspektsind noch zwei weitere Velocity und Variety Aspekte vorhanden Besonders fuumlr dieBig-Data-Aspekte Volume und Velocity empfiehlt sich die Verwendung von verteiltenSystemen Der Begriff Big Data entstand im Jahr 2001 von Doug Laney (damaligenAnalysten der Meta Group) Laney definierte Big Data als Daten mit groszligem Volu-men (Volume) groszliger Vielfalt an Datenformaten (Variety) und groszligen Geschwin-digkeit (Velocity) mit der neue Daten entstehen [11]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 14

11 Aufbau

Die Bachelorarbeit gliedert sich in sechs Teilen Auf die Einleitung folgend widmetsich der zweite Teil mit der Entstehung und den Grundlagen von Raspberry Pi undMongoDB Weiterhin befasst sich das dritte Kapitel mit dem Aufbau InstallationKonfiguration und den dazugehoumlrigen Hardware- und Softwarekomponenten

Im Mittelpunkt des vierten Kapitels steht die Implementierung der Datenreplikationund Datenfragmentierung innerhalb eines Clusters Es werden hier die Funktionali-taumlten eines Cluster ausgefuumlhrt und ausgewertet

Das Kapitel 5 befasst sich mit den Aggregationsmethoden Der Schlussteil dieserArbeit endet mit einem Fazit

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 15

2 Technische Grundlagen

Das zweite Kapitel gibt einen Einblick in die Grundlagen von NoSQL-Datenbankenund Raspberry Pi

21 NoSQL-Definition

Bislang gibt es keine einheitliche und strikte Definition von NoSQL Den Versucheiner Definition haben die Autoren Edlich Friedland Hampe Brauer in ihrem Buch[12] vorgenommen Die besagt

bull Kein relationales DatenmodellEine Vielfaumlltigkeit der Modelle wird gefordert dies bedeutet dass das relatio-nale Modell nicht immer fuumlr jede Anforderung am besten geeignet ist Fuumlr Pro-jekte eignet sich die SWOT-Analyse (StrengthsStaumlrken WeaknessSchwauml-chen OpportunitiesChancen ThreatsBedrohungen) die analysiert welchesModell bzw Datenbanksystem infrage kommt [12]

bull Eignung fuumlr Systeme mit verteilter und horizontaler SkalierbarkeitRelationale Datenbanksysteme arbeiten in der Regel nachdem Scale-up Prin-zip bzw vertikale Skalierbarkeit in dem eine technische Aufruumlstung des Rech-ners stattfindet Im Gegensatz zu den relationalen Datenbanksysteme arbeitendie NoSQL-Datenbanksysteme oft nachdem Scale-out-Prinzip bzw horizon-tale Skalierbarkeit die eine schnellere Reaktionszeit auf Anfragen und Ma-nipulationen durch dynamisches Einbinden und Loumlschen von Rechnerknotenes ermoumlglichen Aufgrund einer vorhandenen Fehlertoleranz ist auch im vor-liegenden Fall ein Knotenfall ohne Konsequenz moumlglich Dadurch sinken dieAnschaffungskosten [12]

bull Quelloffene SoftwareDie meisten NoSQL-Datenbanksysteme sind quelloffen und koumlnnen dadurcheine Voraussetzung sein fuumlr eine SWOT-Analyse aber mit Sicherheit kein ent-scheidendes Argument [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 16

bull Frei von Schemen oder nur von schwaumlcheren Restriktionen betroffenDie Agilitaumlten der Datenstrukturen von Web20-Anwendungen muumlssen in derheutigen Zeit steigen Datenbanksysteme und Anwendungen muumlssen mit un-terschiedlich strukturierten Informationen im Web- und Dokumentbereich um-gehen koumlnnen Die Folge waumlre dass die Anwendung diese Schemainforma-tion zuruumlck verfolgen muumlsste Die Voraussetzung sind schnellere Reaktions-zeiten bei einer Schemaaumlnderung Schemaaumlnderungen koumlnnen nicht wie beiden relationalen Datenbanken ein System minuten- oder stundenlang auszligerBetrieb nehmen [12]

bull Einfache Datenreplikation zur Unterstuumltzung der verteilten ArchitekturDie Grundidee bei einer Datenreplikation ist die Verteilung der Daten auf meh-rere Knoten Es wird eine schnelle und einfache Datenreplikation gefordertdamit die Daten auch bei einem Kontenausfall noch vorhanden sind Die meis-ten NoSQL-Datenbanksysteme arbeiten damit erfolgreich Diese Vorausset-zung kommt zu Stande mit einer abgeschwaumlchten Konsistenzanforderung diein dem CAP-Theorem mit der Eigenschaft evenutally consistency vorhandenist Die Umsetzung erfolgt praktisch uumlber das BASE-Konsistenzmodell [12]

bull Einfache APISQL war sicherlich einfach deklarativ auch sehr ausdrucksstark und vor allemstandardisiert Der wesentlicher Nachteil bei vielen NoSQL-Datenbanksystemeist dass es zwar eine einfache API gibt aber nicht alle Funktionalitaumlten anbie-tet und somit nicht sehr bedeutsam Dadurch entsteht die Folge dass eineEntwicklung von Funktionalitaumlten fuumlr die Anwendung notwendig ist Zur Zeitentstehen neue Funktionalitaumlten die sich auch fuumlr Web20-Anwendungen eig-nen [12]

bull Kein ACID als KonsistenzmodellDie ACID-Eigenschaften verkomplizieren und verlangsamen die verteilte Da-tenhaltung und stellen somit ein Problem fuumlr NoSQL-Datenbanksysteme daDie Eigenschaft evenutally consistency ermoumlglicht den Ansatz dass Datenin den verschiedenen Knoten voruumlbergehend auch inkonsistent sein duumlrfenDieses Szenario kommt oft in den Internet-Anwendungen vor und nicht zumBeispiel sehr oft bei klassischen Geschaumlftsdaten in dem meistens relationaleDatenbanksysteme infrage kommen Es existieren auch Datenbanksystemedie sowohl mit ACID als auch mit BASE arbeiten koumlnnen [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 7: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Inhaltsverzeichnis 7

InhaltsverzeichnisEidesstattliche Erklaumlrung 3

Abbildungsverzeichnis 9

Tabellenverzeichnis 10

Abkuumlrzungsverzeichnis 11

1 Einleitung 1211 Aufbau 14

2 Technische Grundlagen 1521 NoSQL-Definition 1522 CAP-Theorem 1723 BASE 1824 NoSQL-Datenbanken-Vergleich 1825 MongoDB-Struktur 19

251 BSON 20252 ObjectID und Primaumlrschluumlssel 21253 Datentypen 22254 Collection 22255 CRUD 23

26 Raspberry Pi 24261 Raspberry Pi 3 Modell B 25

3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank Mon-goDB auf Basis von Raspberry Pi Einplatinencomputern 2631 Hardware- und Softwarekomponenten 2632 Installation und Konfiguration 27

321 Raspberry Pi Installation 27322 Raspberry Pi Konfiguration 28323 MongoDB Installation 33324 MongoDB Konfiguration 34

4 MongoDB 3741 Grundlagen 37

411 MongoDB-Dienst Starten 3742 Replikation 38

421 Oplog 38422 Master-Slave-Replikation 38423 Replica Sets 38424 Replication uumlber ein Raspberry Pi-Cluster 39

43 Vertikale und Horizontale Skalierung 44431 Vertikale Sklalierung 44432 Horizontale Sklalierung 44

44 Sharding 45441 Sharding uumlber ein Raspberry Pi-Cluster 45

Inhaltsverzeichnis 8

5 Untersuchung der Aggregationsmethoden 4951 Grafische Benutzeroberflaumlche fuumlr MongoDB 4952 Aggregation von Daten 49

521 Einfache Abfragemethoden zur Datenaggregation 50522 Aggregation Pipeline 51523 MapReduce 52

6 Fazit 54

Abbildungsverzeichnis 9

Abbildungsverzeichnis1 Veranschaulichung des CAP-Theorems 172 MongoDB-Struktur 193 ObjectID-Beispiel 214 Raspberry Pi 3 Modell B 255 Aufbau eines Clusters 276 Win32 Disk Manager 287 Menuuml des Konfigurations-Tool raspi-config 288 Programm Fing 309 Datei etcdhcpdconf 3010 PuTTY 3111 Anmeldung per Remotedesktopverbindung 3212 Grafische Oberflaumlche von Raspbian 3213 MongoDB-Dienstdatei 3614 Ablauf von Replica Sets 3815 Mitglieder von Replica Set 3916 Ausfall des Primaumlrservers 4017 Wiederaktiverung des Servers p101 4018 Status des Replica Sets 4119 Status des Replica Set uumlber HTTP-Interface 4120 JavaScript-Befehl rsconf() 4221 Prioritaumltenvergabe 4322 Lesezugriff durch Sekundaumlrserver 4323 Vertikale und Horizontale Skalierung 4424 Erstellung einer Sharding-Umgebung 4725 Sharding-Umgebung 4726 Aufteilung der Shards 4827 Robomongo 4928 Aggregationsmethode count() 5029 Aggregationsmethode distinct() 5030 Aggregationsmethode group() 5131 Aggregation Pipeline 5232 MapReduce 5233 Ergebnisanzeige der Aggregation 53

Tabellenverzeichnis 10

Tabellenverzeichnis1 NoSQL-Anbieter 192 Datenypen 223 System Collections 234 CRUD-Operationen 235 Technische Daten vom Raspberry Pi 3 Model B 256 Konfigurationsdatei mongodbconf 377 Replication-Umgebung 398 Sharding-Umgebung 469 Parameter bei group() 5010 Pipeline-Operationen 51

Tabellenverzeichnis 11

AbkuumlrzungsverzeichnisRaspis Mehrere Geraumlte von Raspberry PiSEQUEL Structured English QUEred LanguageSQL Structured Query LanguageDDL Data Definition LanguageIBM International Business Machines CorporationGPS Global Positioning SystemNoSQL Not Only Structured Query LanguageMongoDB Mongo DatenbankSWOT Strengths Weaknesses Opportunities ThreatsBASE Basically Available Soft State Eventual consistencyFIFO First In - First OutSD Secure DigitalUSB Universal Serial BUSSSH Secure ShellGPIOS General-purpose inputoutputCRUD Create Read Update DeleteJSON JavaScript Object NotationBSON Binary JSONID IdentifikatorCPU Central Processing UnitGPU Graphics Processing UnitDHCP Dynamic Host Configuration ProtocolIP InternetprotokollAPT Advanced Packaging ToolTCP Transmission Control ProtocolHTTP Hypertext Transfer Protocol

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 12

1 Einleitung

Edgar Frank Codd gelingt es in den 1960er und 1970er Jahren ein groszliger Fortschrittmit der Entwicklung von den ersten relationalen Datenbanksystemen [1] In dieserZeit haben relationale Datenbanken immer mehr an Bedeutung gewonnen So ent-stand auch in den 1970er auch die Datenbanksprache SEQUEL (Structured EnglishQUEred Language) basierend auf den relationalen Datenbanken Spaumlter wurde je-doch die Sprache unbenannt in SQL (Structured Query Language) [2]

SQL und relationale Datenbanken arbeiten nach festen Tabellenschemen Einer derSprachelemente vom SQL ist Data Definition Language (DDL) DDL gibt vor zuerstdie Tabelle zu erstellen und nachtraumlglich gibt es die Moumlglichkeit auch Spalten undDatentypen zu erzeugen [3] Die Flexibilitaumlt von dem oben aufgefuumlhrten Schema istbegrenzt Die Menge der Datenmenge ist uumlber die Zeit stetig gewachsen Laut IBMentstehen jeden Tag um die 25 Trillionen Byte an Daten Das heiszligt dass 90 derDaten aus den letzten 2 Jahren entstanden sind Die groszligen Datenmengen entste-hen aus allen Bereichen wie zum Beispiel aus dem Internetbereich GPS-Technikund Sensortechnik [4] Dies fuumlhrt oft dazu dass Datenbankmanagementsystemeund Hardware an ihre Grenzen stoszligen Bewaumlltigung dieser groszligen Datenmengenstellten fuumlr Entwickler neue Herausforderungen Somit entstanden neue NoSQL-Technologien Dies war ein Einstieg fuumlr die Entwicklung von Google MapReduceund Hadoop von Yahoo [5] Diese damals neuen Technologien verarbeiteten besserdie groszligen Datenmengen als zuvor somit war es ein wichtiger Fortschritt [5] DieNoSQL-Welt spielt heute wesentlich eine groszlige Rolle fuumlr die Datenverarbeitung vonBig Data Somit ist der Begriff NoSQL nicht mehr wegzudenken aus der Datenbank-welt

NoSQL ist eine Abkuumlrzung fuumlr Not only SQL (nicht immer nur SQL) Dies be-deutet nicht dass man auf SQL bzw relationaler Datenbank verzichtet sondernauch Alternativen einbezieht zur SQL-Welt [6] NoSQL-Implementierungen sind inmehrere Kategorien unterteilt [6] die in dieser Bachelorarbeit naumlher erklaumlrt werdenMeistens werden groszlige Datenmengen schneller verarbeitet als im Gegensatz zurelationalen Datenbanken Immer mehr NoSQL-Datenbanken verbreiten sich Zur-zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7] Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank MongoDB Es handelt hierbei um eine quelloffene Software MongoDBverwendet fuumlr die Implementierung der Datenbank die Programmiersprache C++[8] Zudem gibt es zahlreiche Mongo-DB-Treiber die in den ProgrammiersprachenC C++ Java Ruby Phyton und PHP zu Verfuumlgung stehen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 13

Viele bekannte Groszligunternehmen wie Facebook Google Expedia und Bosch be-nutzen zurzeit MongoDB [9]

Der Begriff Mongo leitet sich vom englischen Wort humongous was uumlbersetzt be-deutet gigantisch oder wahnsinnig groszlig es wird auf den Volumen Aspekt vonBig Data hingedeutet [10] Zurzeit besteht keine exakte Definition fuumlr Big Data DasSoftwareunternehmen 10gen entwickelte im Jahr 2007 die erste Version von Mon-goDB Im Jahre 2013 kam es auch zu einer Namensaumlnderung des Softwareunter-nehmens die sich ebenfalls in MongoDB umbenannte Neben dem Volumen Aspektsind noch zwei weitere Velocity und Variety Aspekte vorhanden Besonders fuumlr dieBig-Data-Aspekte Volume und Velocity empfiehlt sich die Verwendung von verteiltenSystemen Der Begriff Big Data entstand im Jahr 2001 von Doug Laney (damaligenAnalysten der Meta Group) Laney definierte Big Data als Daten mit groszligem Volu-men (Volume) groszliger Vielfalt an Datenformaten (Variety) und groszligen Geschwin-digkeit (Velocity) mit der neue Daten entstehen [11]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 14

11 Aufbau

Die Bachelorarbeit gliedert sich in sechs Teilen Auf die Einleitung folgend widmetsich der zweite Teil mit der Entstehung und den Grundlagen von Raspberry Pi undMongoDB Weiterhin befasst sich das dritte Kapitel mit dem Aufbau InstallationKonfiguration und den dazugehoumlrigen Hardware- und Softwarekomponenten

Im Mittelpunkt des vierten Kapitels steht die Implementierung der Datenreplikationund Datenfragmentierung innerhalb eines Clusters Es werden hier die Funktionali-taumlten eines Cluster ausgefuumlhrt und ausgewertet

Das Kapitel 5 befasst sich mit den Aggregationsmethoden Der Schlussteil dieserArbeit endet mit einem Fazit

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 15

2 Technische Grundlagen

Das zweite Kapitel gibt einen Einblick in die Grundlagen von NoSQL-Datenbankenund Raspberry Pi

21 NoSQL-Definition

Bislang gibt es keine einheitliche und strikte Definition von NoSQL Den Versucheiner Definition haben die Autoren Edlich Friedland Hampe Brauer in ihrem Buch[12] vorgenommen Die besagt

bull Kein relationales DatenmodellEine Vielfaumlltigkeit der Modelle wird gefordert dies bedeutet dass das relatio-nale Modell nicht immer fuumlr jede Anforderung am besten geeignet ist Fuumlr Pro-jekte eignet sich die SWOT-Analyse (StrengthsStaumlrken WeaknessSchwauml-chen OpportunitiesChancen ThreatsBedrohungen) die analysiert welchesModell bzw Datenbanksystem infrage kommt [12]

bull Eignung fuumlr Systeme mit verteilter und horizontaler SkalierbarkeitRelationale Datenbanksysteme arbeiten in der Regel nachdem Scale-up Prin-zip bzw vertikale Skalierbarkeit in dem eine technische Aufruumlstung des Rech-ners stattfindet Im Gegensatz zu den relationalen Datenbanksysteme arbeitendie NoSQL-Datenbanksysteme oft nachdem Scale-out-Prinzip bzw horizon-tale Skalierbarkeit die eine schnellere Reaktionszeit auf Anfragen und Ma-nipulationen durch dynamisches Einbinden und Loumlschen von Rechnerknotenes ermoumlglichen Aufgrund einer vorhandenen Fehlertoleranz ist auch im vor-liegenden Fall ein Knotenfall ohne Konsequenz moumlglich Dadurch sinken dieAnschaffungskosten [12]

bull Quelloffene SoftwareDie meisten NoSQL-Datenbanksysteme sind quelloffen und koumlnnen dadurcheine Voraussetzung sein fuumlr eine SWOT-Analyse aber mit Sicherheit kein ent-scheidendes Argument [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 16

bull Frei von Schemen oder nur von schwaumlcheren Restriktionen betroffenDie Agilitaumlten der Datenstrukturen von Web20-Anwendungen muumlssen in derheutigen Zeit steigen Datenbanksysteme und Anwendungen muumlssen mit un-terschiedlich strukturierten Informationen im Web- und Dokumentbereich um-gehen koumlnnen Die Folge waumlre dass die Anwendung diese Schemainforma-tion zuruumlck verfolgen muumlsste Die Voraussetzung sind schnellere Reaktions-zeiten bei einer Schemaaumlnderung Schemaaumlnderungen koumlnnen nicht wie beiden relationalen Datenbanken ein System minuten- oder stundenlang auszligerBetrieb nehmen [12]

bull Einfache Datenreplikation zur Unterstuumltzung der verteilten ArchitekturDie Grundidee bei einer Datenreplikation ist die Verteilung der Daten auf meh-rere Knoten Es wird eine schnelle und einfache Datenreplikation gefordertdamit die Daten auch bei einem Kontenausfall noch vorhanden sind Die meis-ten NoSQL-Datenbanksysteme arbeiten damit erfolgreich Diese Vorausset-zung kommt zu Stande mit einer abgeschwaumlchten Konsistenzanforderung diein dem CAP-Theorem mit der Eigenschaft evenutally consistency vorhandenist Die Umsetzung erfolgt praktisch uumlber das BASE-Konsistenzmodell [12]

bull Einfache APISQL war sicherlich einfach deklarativ auch sehr ausdrucksstark und vor allemstandardisiert Der wesentlicher Nachteil bei vielen NoSQL-Datenbanksystemeist dass es zwar eine einfache API gibt aber nicht alle Funktionalitaumlten anbie-tet und somit nicht sehr bedeutsam Dadurch entsteht die Folge dass eineEntwicklung von Funktionalitaumlten fuumlr die Anwendung notwendig ist Zur Zeitentstehen neue Funktionalitaumlten die sich auch fuumlr Web20-Anwendungen eig-nen [12]

bull Kein ACID als KonsistenzmodellDie ACID-Eigenschaften verkomplizieren und verlangsamen die verteilte Da-tenhaltung und stellen somit ein Problem fuumlr NoSQL-Datenbanksysteme daDie Eigenschaft evenutally consistency ermoumlglicht den Ansatz dass Datenin den verschiedenen Knoten voruumlbergehend auch inkonsistent sein duumlrfenDieses Szenario kommt oft in den Internet-Anwendungen vor und nicht zumBeispiel sehr oft bei klassischen Geschaumlftsdaten in dem meistens relationaleDatenbanksysteme infrage kommen Es existieren auch Datenbanksystemedie sowohl mit ACID als auch mit BASE arbeiten koumlnnen [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 8: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Inhaltsverzeichnis 8

5 Untersuchung der Aggregationsmethoden 4951 Grafische Benutzeroberflaumlche fuumlr MongoDB 4952 Aggregation von Daten 49

521 Einfache Abfragemethoden zur Datenaggregation 50522 Aggregation Pipeline 51523 MapReduce 52

6 Fazit 54

Abbildungsverzeichnis 9

Abbildungsverzeichnis1 Veranschaulichung des CAP-Theorems 172 MongoDB-Struktur 193 ObjectID-Beispiel 214 Raspberry Pi 3 Modell B 255 Aufbau eines Clusters 276 Win32 Disk Manager 287 Menuuml des Konfigurations-Tool raspi-config 288 Programm Fing 309 Datei etcdhcpdconf 3010 PuTTY 3111 Anmeldung per Remotedesktopverbindung 3212 Grafische Oberflaumlche von Raspbian 3213 MongoDB-Dienstdatei 3614 Ablauf von Replica Sets 3815 Mitglieder von Replica Set 3916 Ausfall des Primaumlrservers 4017 Wiederaktiverung des Servers p101 4018 Status des Replica Sets 4119 Status des Replica Set uumlber HTTP-Interface 4120 JavaScript-Befehl rsconf() 4221 Prioritaumltenvergabe 4322 Lesezugriff durch Sekundaumlrserver 4323 Vertikale und Horizontale Skalierung 4424 Erstellung einer Sharding-Umgebung 4725 Sharding-Umgebung 4726 Aufteilung der Shards 4827 Robomongo 4928 Aggregationsmethode count() 5029 Aggregationsmethode distinct() 5030 Aggregationsmethode group() 5131 Aggregation Pipeline 5232 MapReduce 5233 Ergebnisanzeige der Aggregation 53

Tabellenverzeichnis 10

Tabellenverzeichnis1 NoSQL-Anbieter 192 Datenypen 223 System Collections 234 CRUD-Operationen 235 Technische Daten vom Raspberry Pi 3 Model B 256 Konfigurationsdatei mongodbconf 377 Replication-Umgebung 398 Sharding-Umgebung 469 Parameter bei group() 5010 Pipeline-Operationen 51

Tabellenverzeichnis 11

AbkuumlrzungsverzeichnisRaspis Mehrere Geraumlte von Raspberry PiSEQUEL Structured English QUEred LanguageSQL Structured Query LanguageDDL Data Definition LanguageIBM International Business Machines CorporationGPS Global Positioning SystemNoSQL Not Only Structured Query LanguageMongoDB Mongo DatenbankSWOT Strengths Weaknesses Opportunities ThreatsBASE Basically Available Soft State Eventual consistencyFIFO First In - First OutSD Secure DigitalUSB Universal Serial BUSSSH Secure ShellGPIOS General-purpose inputoutputCRUD Create Read Update DeleteJSON JavaScript Object NotationBSON Binary JSONID IdentifikatorCPU Central Processing UnitGPU Graphics Processing UnitDHCP Dynamic Host Configuration ProtocolIP InternetprotokollAPT Advanced Packaging ToolTCP Transmission Control ProtocolHTTP Hypertext Transfer Protocol

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 12

1 Einleitung

Edgar Frank Codd gelingt es in den 1960er und 1970er Jahren ein groszliger Fortschrittmit der Entwicklung von den ersten relationalen Datenbanksystemen [1] In dieserZeit haben relationale Datenbanken immer mehr an Bedeutung gewonnen So ent-stand auch in den 1970er auch die Datenbanksprache SEQUEL (Structured EnglishQUEred Language) basierend auf den relationalen Datenbanken Spaumlter wurde je-doch die Sprache unbenannt in SQL (Structured Query Language) [2]

SQL und relationale Datenbanken arbeiten nach festen Tabellenschemen Einer derSprachelemente vom SQL ist Data Definition Language (DDL) DDL gibt vor zuerstdie Tabelle zu erstellen und nachtraumlglich gibt es die Moumlglichkeit auch Spalten undDatentypen zu erzeugen [3] Die Flexibilitaumlt von dem oben aufgefuumlhrten Schema istbegrenzt Die Menge der Datenmenge ist uumlber die Zeit stetig gewachsen Laut IBMentstehen jeden Tag um die 25 Trillionen Byte an Daten Das heiszligt dass 90 derDaten aus den letzten 2 Jahren entstanden sind Die groszligen Datenmengen entste-hen aus allen Bereichen wie zum Beispiel aus dem Internetbereich GPS-Technikund Sensortechnik [4] Dies fuumlhrt oft dazu dass Datenbankmanagementsystemeund Hardware an ihre Grenzen stoszligen Bewaumlltigung dieser groszligen Datenmengenstellten fuumlr Entwickler neue Herausforderungen Somit entstanden neue NoSQL-Technologien Dies war ein Einstieg fuumlr die Entwicklung von Google MapReduceund Hadoop von Yahoo [5] Diese damals neuen Technologien verarbeiteten besserdie groszligen Datenmengen als zuvor somit war es ein wichtiger Fortschritt [5] DieNoSQL-Welt spielt heute wesentlich eine groszlige Rolle fuumlr die Datenverarbeitung vonBig Data Somit ist der Begriff NoSQL nicht mehr wegzudenken aus der Datenbank-welt

NoSQL ist eine Abkuumlrzung fuumlr Not only SQL (nicht immer nur SQL) Dies be-deutet nicht dass man auf SQL bzw relationaler Datenbank verzichtet sondernauch Alternativen einbezieht zur SQL-Welt [6] NoSQL-Implementierungen sind inmehrere Kategorien unterteilt [6] die in dieser Bachelorarbeit naumlher erklaumlrt werdenMeistens werden groszlige Datenmengen schneller verarbeitet als im Gegensatz zurelationalen Datenbanken Immer mehr NoSQL-Datenbanken verbreiten sich Zur-zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7] Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank MongoDB Es handelt hierbei um eine quelloffene Software MongoDBverwendet fuumlr die Implementierung der Datenbank die Programmiersprache C++[8] Zudem gibt es zahlreiche Mongo-DB-Treiber die in den ProgrammiersprachenC C++ Java Ruby Phyton und PHP zu Verfuumlgung stehen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 13

Viele bekannte Groszligunternehmen wie Facebook Google Expedia und Bosch be-nutzen zurzeit MongoDB [9]

Der Begriff Mongo leitet sich vom englischen Wort humongous was uumlbersetzt be-deutet gigantisch oder wahnsinnig groszlig es wird auf den Volumen Aspekt vonBig Data hingedeutet [10] Zurzeit besteht keine exakte Definition fuumlr Big Data DasSoftwareunternehmen 10gen entwickelte im Jahr 2007 die erste Version von Mon-goDB Im Jahre 2013 kam es auch zu einer Namensaumlnderung des Softwareunter-nehmens die sich ebenfalls in MongoDB umbenannte Neben dem Volumen Aspektsind noch zwei weitere Velocity und Variety Aspekte vorhanden Besonders fuumlr dieBig-Data-Aspekte Volume und Velocity empfiehlt sich die Verwendung von verteiltenSystemen Der Begriff Big Data entstand im Jahr 2001 von Doug Laney (damaligenAnalysten der Meta Group) Laney definierte Big Data als Daten mit groszligem Volu-men (Volume) groszliger Vielfalt an Datenformaten (Variety) und groszligen Geschwin-digkeit (Velocity) mit der neue Daten entstehen [11]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 14

11 Aufbau

Die Bachelorarbeit gliedert sich in sechs Teilen Auf die Einleitung folgend widmetsich der zweite Teil mit der Entstehung und den Grundlagen von Raspberry Pi undMongoDB Weiterhin befasst sich das dritte Kapitel mit dem Aufbau InstallationKonfiguration und den dazugehoumlrigen Hardware- und Softwarekomponenten

Im Mittelpunkt des vierten Kapitels steht die Implementierung der Datenreplikationund Datenfragmentierung innerhalb eines Clusters Es werden hier die Funktionali-taumlten eines Cluster ausgefuumlhrt und ausgewertet

Das Kapitel 5 befasst sich mit den Aggregationsmethoden Der Schlussteil dieserArbeit endet mit einem Fazit

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 15

2 Technische Grundlagen

Das zweite Kapitel gibt einen Einblick in die Grundlagen von NoSQL-Datenbankenund Raspberry Pi

21 NoSQL-Definition

Bislang gibt es keine einheitliche und strikte Definition von NoSQL Den Versucheiner Definition haben die Autoren Edlich Friedland Hampe Brauer in ihrem Buch[12] vorgenommen Die besagt

bull Kein relationales DatenmodellEine Vielfaumlltigkeit der Modelle wird gefordert dies bedeutet dass das relatio-nale Modell nicht immer fuumlr jede Anforderung am besten geeignet ist Fuumlr Pro-jekte eignet sich die SWOT-Analyse (StrengthsStaumlrken WeaknessSchwauml-chen OpportunitiesChancen ThreatsBedrohungen) die analysiert welchesModell bzw Datenbanksystem infrage kommt [12]

bull Eignung fuumlr Systeme mit verteilter und horizontaler SkalierbarkeitRelationale Datenbanksysteme arbeiten in der Regel nachdem Scale-up Prin-zip bzw vertikale Skalierbarkeit in dem eine technische Aufruumlstung des Rech-ners stattfindet Im Gegensatz zu den relationalen Datenbanksysteme arbeitendie NoSQL-Datenbanksysteme oft nachdem Scale-out-Prinzip bzw horizon-tale Skalierbarkeit die eine schnellere Reaktionszeit auf Anfragen und Ma-nipulationen durch dynamisches Einbinden und Loumlschen von Rechnerknotenes ermoumlglichen Aufgrund einer vorhandenen Fehlertoleranz ist auch im vor-liegenden Fall ein Knotenfall ohne Konsequenz moumlglich Dadurch sinken dieAnschaffungskosten [12]

bull Quelloffene SoftwareDie meisten NoSQL-Datenbanksysteme sind quelloffen und koumlnnen dadurcheine Voraussetzung sein fuumlr eine SWOT-Analyse aber mit Sicherheit kein ent-scheidendes Argument [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 16

bull Frei von Schemen oder nur von schwaumlcheren Restriktionen betroffenDie Agilitaumlten der Datenstrukturen von Web20-Anwendungen muumlssen in derheutigen Zeit steigen Datenbanksysteme und Anwendungen muumlssen mit un-terschiedlich strukturierten Informationen im Web- und Dokumentbereich um-gehen koumlnnen Die Folge waumlre dass die Anwendung diese Schemainforma-tion zuruumlck verfolgen muumlsste Die Voraussetzung sind schnellere Reaktions-zeiten bei einer Schemaaumlnderung Schemaaumlnderungen koumlnnen nicht wie beiden relationalen Datenbanken ein System minuten- oder stundenlang auszligerBetrieb nehmen [12]

bull Einfache Datenreplikation zur Unterstuumltzung der verteilten ArchitekturDie Grundidee bei einer Datenreplikation ist die Verteilung der Daten auf meh-rere Knoten Es wird eine schnelle und einfache Datenreplikation gefordertdamit die Daten auch bei einem Kontenausfall noch vorhanden sind Die meis-ten NoSQL-Datenbanksysteme arbeiten damit erfolgreich Diese Vorausset-zung kommt zu Stande mit einer abgeschwaumlchten Konsistenzanforderung diein dem CAP-Theorem mit der Eigenschaft evenutally consistency vorhandenist Die Umsetzung erfolgt praktisch uumlber das BASE-Konsistenzmodell [12]

bull Einfache APISQL war sicherlich einfach deklarativ auch sehr ausdrucksstark und vor allemstandardisiert Der wesentlicher Nachteil bei vielen NoSQL-Datenbanksystemeist dass es zwar eine einfache API gibt aber nicht alle Funktionalitaumlten anbie-tet und somit nicht sehr bedeutsam Dadurch entsteht die Folge dass eineEntwicklung von Funktionalitaumlten fuumlr die Anwendung notwendig ist Zur Zeitentstehen neue Funktionalitaumlten die sich auch fuumlr Web20-Anwendungen eig-nen [12]

bull Kein ACID als KonsistenzmodellDie ACID-Eigenschaften verkomplizieren und verlangsamen die verteilte Da-tenhaltung und stellen somit ein Problem fuumlr NoSQL-Datenbanksysteme daDie Eigenschaft evenutally consistency ermoumlglicht den Ansatz dass Datenin den verschiedenen Knoten voruumlbergehend auch inkonsistent sein duumlrfenDieses Szenario kommt oft in den Internet-Anwendungen vor und nicht zumBeispiel sehr oft bei klassischen Geschaumlftsdaten in dem meistens relationaleDatenbanksysteme infrage kommen Es existieren auch Datenbanksystemedie sowohl mit ACID als auch mit BASE arbeiten koumlnnen [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 9: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Abbildungsverzeichnis 9

Abbildungsverzeichnis1 Veranschaulichung des CAP-Theorems 172 MongoDB-Struktur 193 ObjectID-Beispiel 214 Raspberry Pi 3 Modell B 255 Aufbau eines Clusters 276 Win32 Disk Manager 287 Menuuml des Konfigurations-Tool raspi-config 288 Programm Fing 309 Datei etcdhcpdconf 3010 PuTTY 3111 Anmeldung per Remotedesktopverbindung 3212 Grafische Oberflaumlche von Raspbian 3213 MongoDB-Dienstdatei 3614 Ablauf von Replica Sets 3815 Mitglieder von Replica Set 3916 Ausfall des Primaumlrservers 4017 Wiederaktiverung des Servers p101 4018 Status des Replica Sets 4119 Status des Replica Set uumlber HTTP-Interface 4120 JavaScript-Befehl rsconf() 4221 Prioritaumltenvergabe 4322 Lesezugriff durch Sekundaumlrserver 4323 Vertikale und Horizontale Skalierung 4424 Erstellung einer Sharding-Umgebung 4725 Sharding-Umgebung 4726 Aufteilung der Shards 4827 Robomongo 4928 Aggregationsmethode count() 5029 Aggregationsmethode distinct() 5030 Aggregationsmethode group() 5131 Aggregation Pipeline 5232 MapReduce 5233 Ergebnisanzeige der Aggregation 53

Tabellenverzeichnis 10

Tabellenverzeichnis1 NoSQL-Anbieter 192 Datenypen 223 System Collections 234 CRUD-Operationen 235 Technische Daten vom Raspberry Pi 3 Model B 256 Konfigurationsdatei mongodbconf 377 Replication-Umgebung 398 Sharding-Umgebung 469 Parameter bei group() 5010 Pipeline-Operationen 51

Tabellenverzeichnis 11

AbkuumlrzungsverzeichnisRaspis Mehrere Geraumlte von Raspberry PiSEQUEL Structured English QUEred LanguageSQL Structured Query LanguageDDL Data Definition LanguageIBM International Business Machines CorporationGPS Global Positioning SystemNoSQL Not Only Structured Query LanguageMongoDB Mongo DatenbankSWOT Strengths Weaknesses Opportunities ThreatsBASE Basically Available Soft State Eventual consistencyFIFO First In - First OutSD Secure DigitalUSB Universal Serial BUSSSH Secure ShellGPIOS General-purpose inputoutputCRUD Create Read Update DeleteJSON JavaScript Object NotationBSON Binary JSONID IdentifikatorCPU Central Processing UnitGPU Graphics Processing UnitDHCP Dynamic Host Configuration ProtocolIP InternetprotokollAPT Advanced Packaging ToolTCP Transmission Control ProtocolHTTP Hypertext Transfer Protocol

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 12

1 Einleitung

Edgar Frank Codd gelingt es in den 1960er und 1970er Jahren ein groszliger Fortschrittmit der Entwicklung von den ersten relationalen Datenbanksystemen [1] In dieserZeit haben relationale Datenbanken immer mehr an Bedeutung gewonnen So ent-stand auch in den 1970er auch die Datenbanksprache SEQUEL (Structured EnglishQUEred Language) basierend auf den relationalen Datenbanken Spaumlter wurde je-doch die Sprache unbenannt in SQL (Structured Query Language) [2]

SQL und relationale Datenbanken arbeiten nach festen Tabellenschemen Einer derSprachelemente vom SQL ist Data Definition Language (DDL) DDL gibt vor zuerstdie Tabelle zu erstellen und nachtraumlglich gibt es die Moumlglichkeit auch Spalten undDatentypen zu erzeugen [3] Die Flexibilitaumlt von dem oben aufgefuumlhrten Schema istbegrenzt Die Menge der Datenmenge ist uumlber die Zeit stetig gewachsen Laut IBMentstehen jeden Tag um die 25 Trillionen Byte an Daten Das heiszligt dass 90 derDaten aus den letzten 2 Jahren entstanden sind Die groszligen Datenmengen entste-hen aus allen Bereichen wie zum Beispiel aus dem Internetbereich GPS-Technikund Sensortechnik [4] Dies fuumlhrt oft dazu dass Datenbankmanagementsystemeund Hardware an ihre Grenzen stoszligen Bewaumlltigung dieser groszligen Datenmengenstellten fuumlr Entwickler neue Herausforderungen Somit entstanden neue NoSQL-Technologien Dies war ein Einstieg fuumlr die Entwicklung von Google MapReduceund Hadoop von Yahoo [5] Diese damals neuen Technologien verarbeiteten besserdie groszligen Datenmengen als zuvor somit war es ein wichtiger Fortschritt [5] DieNoSQL-Welt spielt heute wesentlich eine groszlige Rolle fuumlr die Datenverarbeitung vonBig Data Somit ist der Begriff NoSQL nicht mehr wegzudenken aus der Datenbank-welt

NoSQL ist eine Abkuumlrzung fuumlr Not only SQL (nicht immer nur SQL) Dies be-deutet nicht dass man auf SQL bzw relationaler Datenbank verzichtet sondernauch Alternativen einbezieht zur SQL-Welt [6] NoSQL-Implementierungen sind inmehrere Kategorien unterteilt [6] die in dieser Bachelorarbeit naumlher erklaumlrt werdenMeistens werden groszlige Datenmengen schneller verarbeitet als im Gegensatz zurelationalen Datenbanken Immer mehr NoSQL-Datenbanken verbreiten sich Zur-zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7] Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank MongoDB Es handelt hierbei um eine quelloffene Software MongoDBverwendet fuumlr die Implementierung der Datenbank die Programmiersprache C++[8] Zudem gibt es zahlreiche Mongo-DB-Treiber die in den ProgrammiersprachenC C++ Java Ruby Phyton und PHP zu Verfuumlgung stehen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 13

Viele bekannte Groszligunternehmen wie Facebook Google Expedia und Bosch be-nutzen zurzeit MongoDB [9]

Der Begriff Mongo leitet sich vom englischen Wort humongous was uumlbersetzt be-deutet gigantisch oder wahnsinnig groszlig es wird auf den Volumen Aspekt vonBig Data hingedeutet [10] Zurzeit besteht keine exakte Definition fuumlr Big Data DasSoftwareunternehmen 10gen entwickelte im Jahr 2007 die erste Version von Mon-goDB Im Jahre 2013 kam es auch zu einer Namensaumlnderung des Softwareunter-nehmens die sich ebenfalls in MongoDB umbenannte Neben dem Volumen Aspektsind noch zwei weitere Velocity und Variety Aspekte vorhanden Besonders fuumlr dieBig-Data-Aspekte Volume und Velocity empfiehlt sich die Verwendung von verteiltenSystemen Der Begriff Big Data entstand im Jahr 2001 von Doug Laney (damaligenAnalysten der Meta Group) Laney definierte Big Data als Daten mit groszligem Volu-men (Volume) groszliger Vielfalt an Datenformaten (Variety) und groszligen Geschwin-digkeit (Velocity) mit der neue Daten entstehen [11]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 14

11 Aufbau

Die Bachelorarbeit gliedert sich in sechs Teilen Auf die Einleitung folgend widmetsich der zweite Teil mit der Entstehung und den Grundlagen von Raspberry Pi undMongoDB Weiterhin befasst sich das dritte Kapitel mit dem Aufbau InstallationKonfiguration und den dazugehoumlrigen Hardware- und Softwarekomponenten

Im Mittelpunkt des vierten Kapitels steht die Implementierung der Datenreplikationund Datenfragmentierung innerhalb eines Clusters Es werden hier die Funktionali-taumlten eines Cluster ausgefuumlhrt und ausgewertet

Das Kapitel 5 befasst sich mit den Aggregationsmethoden Der Schlussteil dieserArbeit endet mit einem Fazit

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 15

2 Technische Grundlagen

Das zweite Kapitel gibt einen Einblick in die Grundlagen von NoSQL-Datenbankenund Raspberry Pi

21 NoSQL-Definition

Bislang gibt es keine einheitliche und strikte Definition von NoSQL Den Versucheiner Definition haben die Autoren Edlich Friedland Hampe Brauer in ihrem Buch[12] vorgenommen Die besagt

bull Kein relationales DatenmodellEine Vielfaumlltigkeit der Modelle wird gefordert dies bedeutet dass das relatio-nale Modell nicht immer fuumlr jede Anforderung am besten geeignet ist Fuumlr Pro-jekte eignet sich die SWOT-Analyse (StrengthsStaumlrken WeaknessSchwauml-chen OpportunitiesChancen ThreatsBedrohungen) die analysiert welchesModell bzw Datenbanksystem infrage kommt [12]

bull Eignung fuumlr Systeme mit verteilter und horizontaler SkalierbarkeitRelationale Datenbanksysteme arbeiten in der Regel nachdem Scale-up Prin-zip bzw vertikale Skalierbarkeit in dem eine technische Aufruumlstung des Rech-ners stattfindet Im Gegensatz zu den relationalen Datenbanksysteme arbeitendie NoSQL-Datenbanksysteme oft nachdem Scale-out-Prinzip bzw horizon-tale Skalierbarkeit die eine schnellere Reaktionszeit auf Anfragen und Ma-nipulationen durch dynamisches Einbinden und Loumlschen von Rechnerknotenes ermoumlglichen Aufgrund einer vorhandenen Fehlertoleranz ist auch im vor-liegenden Fall ein Knotenfall ohne Konsequenz moumlglich Dadurch sinken dieAnschaffungskosten [12]

bull Quelloffene SoftwareDie meisten NoSQL-Datenbanksysteme sind quelloffen und koumlnnen dadurcheine Voraussetzung sein fuumlr eine SWOT-Analyse aber mit Sicherheit kein ent-scheidendes Argument [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 16

bull Frei von Schemen oder nur von schwaumlcheren Restriktionen betroffenDie Agilitaumlten der Datenstrukturen von Web20-Anwendungen muumlssen in derheutigen Zeit steigen Datenbanksysteme und Anwendungen muumlssen mit un-terschiedlich strukturierten Informationen im Web- und Dokumentbereich um-gehen koumlnnen Die Folge waumlre dass die Anwendung diese Schemainforma-tion zuruumlck verfolgen muumlsste Die Voraussetzung sind schnellere Reaktions-zeiten bei einer Schemaaumlnderung Schemaaumlnderungen koumlnnen nicht wie beiden relationalen Datenbanken ein System minuten- oder stundenlang auszligerBetrieb nehmen [12]

bull Einfache Datenreplikation zur Unterstuumltzung der verteilten ArchitekturDie Grundidee bei einer Datenreplikation ist die Verteilung der Daten auf meh-rere Knoten Es wird eine schnelle und einfache Datenreplikation gefordertdamit die Daten auch bei einem Kontenausfall noch vorhanden sind Die meis-ten NoSQL-Datenbanksysteme arbeiten damit erfolgreich Diese Vorausset-zung kommt zu Stande mit einer abgeschwaumlchten Konsistenzanforderung diein dem CAP-Theorem mit der Eigenschaft evenutally consistency vorhandenist Die Umsetzung erfolgt praktisch uumlber das BASE-Konsistenzmodell [12]

bull Einfache APISQL war sicherlich einfach deklarativ auch sehr ausdrucksstark und vor allemstandardisiert Der wesentlicher Nachteil bei vielen NoSQL-Datenbanksystemeist dass es zwar eine einfache API gibt aber nicht alle Funktionalitaumlten anbie-tet und somit nicht sehr bedeutsam Dadurch entsteht die Folge dass eineEntwicklung von Funktionalitaumlten fuumlr die Anwendung notwendig ist Zur Zeitentstehen neue Funktionalitaumlten die sich auch fuumlr Web20-Anwendungen eig-nen [12]

bull Kein ACID als KonsistenzmodellDie ACID-Eigenschaften verkomplizieren und verlangsamen die verteilte Da-tenhaltung und stellen somit ein Problem fuumlr NoSQL-Datenbanksysteme daDie Eigenschaft evenutally consistency ermoumlglicht den Ansatz dass Datenin den verschiedenen Knoten voruumlbergehend auch inkonsistent sein duumlrfenDieses Szenario kommt oft in den Internet-Anwendungen vor und nicht zumBeispiel sehr oft bei klassischen Geschaumlftsdaten in dem meistens relationaleDatenbanksysteme infrage kommen Es existieren auch Datenbanksystemedie sowohl mit ACID als auch mit BASE arbeiten koumlnnen [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 10: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Tabellenverzeichnis 10

Tabellenverzeichnis1 NoSQL-Anbieter 192 Datenypen 223 System Collections 234 CRUD-Operationen 235 Technische Daten vom Raspberry Pi 3 Model B 256 Konfigurationsdatei mongodbconf 377 Replication-Umgebung 398 Sharding-Umgebung 469 Parameter bei group() 5010 Pipeline-Operationen 51

Tabellenverzeichnis 11

AbkuumlrzungsverzeichnisRaspis Mehrere Geraumlte von Raspberry PiSEQUEL Structured English QUEred LanguageSQL Structured Query LanguageDDL Data Definition LanguageIBM International Business Machines CorporationGPS Global Positioning SystemNoSQL Not Only Structured Query LanguageMongoDB Mongo DatenbankSWOT Strengths Weaknesses Opportunities ThreatsBASE Basically Available Soft State Eventual consistencyFIFO First In - First OutSD Secure DigitalUSB Universal Serial BUSSSH Secure ShellGPIOS General-purpose inputoutputCRUD Create Read Update DeleteJSON JavaScript Object NotationBSON Binary JSONID IdentifikatorCPU Central Processing UnitGPU Graphics Processing UnitDHCP Dynamic Host Configuration ProtocolIP InternetprotokollAPT Advanced Packaging ToolTCP Transmission Control ProtocolHTTP Hypertext Transfer Protocol

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 12

1 Einleitung

Edgar Frank Codd gelingt es in den 1960er und 1970er Jahren ein groszliger Fortschrittmit der Entwicklung von den ersten relationalen Datenbanksystemen [1] In dieserZeit haben relationale Datenbanken immer mehr an Bedeutung gewonnen So ent-stand auch in den 1970er auch die Datenbanksprache SEQUEL (Structured EnglishQUEred Language) basierend auf den relationalen Datenbanken Spaumlter wurde je-doch die Sprache unbenannt in SQL (Structured Query Language) [2]

SQL und relationale Datenbanken arbeiten nach festen Tabellenschemen Einer derSprachelemente vom SQL ist Data Definition Language (DDL) DDL gibt vor zuerstdie Tabelle zu erstellen und nachtraumlglich gibt es die Moumlglichkeit auch Spalten undDatentypen zu erzeugen [3] Die Flexibilitaumlt von dem oben aufgefuumlhrten Schema istbegrenzt Die Menge der Datenmenge ist uumlber die Zeit stetig gewachsen Laut IBMentstehen jeden Tag um die 25 Trillionen Byte an Daten Das heiszligt dass 90 derDaten aus den letzten 2 Jahren entstanden sind Die groszligen Datenmengen entste-hen aus allen Bereichen wie zum Beispiel aus dem Internetbereich GPS-Technikund Sensortechnik [4] Dies fuumlhrt oft dazu dass Datenbankmanagementsystemeund Hardware an ihre Grenzen stoszligen Bewaumlltigung dieser groszligen Datenmengenstellten fuumlr Entwickler neue Herausforderungen Somit entstanden neue NoSQL-Technologien Dies war ein Einstieg fuumlr die Entwicklung von Google MapReduceund Hadoop von Yahoo [5] Diese damals neuen Technologien verarbeiteten besserdie groszligen Datenmengen als zuvor somit war es ein wichtiger Fortschritt [5] DieNoSQL-Welt spielt heute wesentlich eine groszlige Rolle fuumlr die Datenverarbeitung vonBig Data Somit ist der Begriff NoSQL nicht mehr wegzudenken aus der Datenbank-welt

NoSQL ist eine Abkuumlrzung fuumlr Not only SQL (nicht immer nur SQL) Dies be-deutet nicht dass man auf SQL bzw relationaler Datenbank verzichtet sondernauch Alternativen einbezieht zur SQL-Welt [6] NoSQL-Implementierungen sind inmehrere Kategorien unterteilt [6] die in dieser Bachelorarbeit naumlher erklaumlrt werdenMeistens werden groszlige Datenmengen schneller verarbeitet als im Gegensatz zurelationalen Datenbanken Immer mehr NoSQL-Datenbanken verbreiten sich Zur-zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7] Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank MongoDB Es handelt hierbei um eine quelloffene Software MongoDBverwendet fuumlr die Implementierung der Datenbank die Programmiersprache C++[8] Zudem gibt es zahlreiche Mongo-DB-Treiber die in den ProgrammiersprachenC C++ Java Ruby Phyton und PHP zu Verfuumlgung stehen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 13

Viele bekannte Groszligunternehmen wie Facebook Google Expedia und Bosch be-nutzen zurzeit MongoDB [9]

Der Begriff Mongo leitet sich vom englischen Wort humongous was uumlbersetzt be-deutet gigantisch oder wahnsinnig groszlig es wird auf den Volumen Aspekt vonBig Data hingedeutet [10] Zurzeit besteht keine exakte Definition fuumlr Big Data DasSoftwareunternehmen 10gen entwickelte im Jahr 2007 die erste Version von Mon-goDB Im Jahre 2013 kam es auch zu einer Namensaumlnderung des Softwareunter-nehmens die sich ebenfalls in MongoDB umbenannte Neben dem Volumen Aspektsind noch zwei weitere Velocity und Variety Aspekte vorhanden Besonders fuumlr dieBig-Data-Aspekte Volume und Velocity empfiehlt sich die Verwendung von verteiltenSystemen Der Begriff Big Data entstand im Jahr 2001 von Doug Laney (damaligenAnalysten der Meta Group) Laney definierte Big Data als Daten mit groszligem Volu-men (Volume) groszliger Vielfalt an Datenformaten (Variety) und groszligen Geschwin-digkeit (Velocity) mit der neue Daten entstehen [11]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 14

11 Aufbau

Die Bachelorarbeit gliedert sich in sechs Teilen Auf die Einleitung folgend widmetsich der zweite Teil mit der Entstehung und den Grundlagen von Raspberry Pi undMongoDB Weiterhin befasst sich das dritte Kapitel mit dem Aufbau InstallationKonfiguration und den dazugehoumlrigen Hardware- und Softwarekomponenten

Im Mittelpunkt des vierten Kapitels steht die Implementierung der Datenreplikationund Datenfragmentierung innerhalb eines Clusters Es werden hier die Funktionali-taumlten eines Cluster ausgefuumlhrt und ausgewertet

Das Kapitel 5 befasst sich mit den Aggregationsmethoden Der Schlussteil dieserArbeit endet mit einem Fazit

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 15

2 Technische Grundlagen

Das zweite Kapitel gibt einen Einblick in die Grundlagen von NoSQL-Datenbankenund Raspberry Pi

21 NoSQL-Definition

Bislang gibt es keine einheitliche und strikte Definition von NoSQL Den Versucheiner Definition haben die Autoren Edlich Friedland Hampe Brauer in ihrem Buch[12] vorgenommen Die besagt

bull Kein relationales DatenmodellEine Vielfaumlltigkeit der Modelle wird gefordert dies bedeutet dass das relatio-nale Modell nicht immer fuumlr jede Anforderung am besten geeignet ist Fuumlr Pro-jekte eignet sich die SWOT-Analyse (StrengthsStaumlrken WeaknessSchwauml-chen OpportunitiesChancen ThreatsBedrohungen) die analysiert welchesModell bzw Datenbanksystem infrage kommt [12]

bull Eignung fuumlr Systeme mit verteilter und horizontaler SkalierbarkeitRelationale Datenbanksysteme arbeiten in der Regel nachdem Scale-up Prin-zip bzw vertikale Skalierbarkeit in dem eine technische Aufruumlstung des Rech-ners stattfindet Im Gegensatz zu den relationalen Datenbanksysteme arbeitendie NoSQL-Datenbanksysteme oft nachdem Scale-out-Prinzip bzw horizon-tale Skalierbarkeit die eine schnellere Reaktionszeit auf Anfragen und Ma-nipulationen durch dynamisches Einbinden und Loumlschen von Rechnerknotenes ermoumlglichen Aufgrund einer vorhandenen Fehlertoleranz ist auch im vor-liegenden Fall ein Knotenfall ohne Konsequenz moumlglich Dadurch sinken dieAnschaffungskosten [12]

bull Quelloffene SoftwareDie meisten NoSQL-Datenbanksysteme sind quelloffen und koumlnnen dadurcheine Voraussetzung sein fuumlr eine SWOT-Analyse aber mit Sicherheit kein ent-scheidendes Argument [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 16

bull Frei von Schemen oder nur von schwaumlcheren Restriktionen betroffenDie Agilitaumlten der Datenstrukturen von Web20-Anwendungen muumlssen in derheutigen Zeit steigen Datenbanksysteme und Anwendungen muumlssen mit un-terschiedlich strukturierten Informationen im Web- und Dokumentbereich um-gehen koumlnnen Die Folge waumlre dass die Anwendung diese Schemainforma-tion zuruumlck verfolgen muumlsste Die Voraussetzung sind schnellere Reaktions-zeiten bei einer Schemaaumlnderung Schemaaumlnderungen koumlnnen nicht wie beiden relationalen Datenbanken ein System minuten- oder stundenlang auszligerBetrieb nehmen [12]

bull Einfache Datenreplikation zur Unterstuumltzung der verteilten ArchitekturDie Grundidee bei einer Datenreplikation ist die Verteilung der Daten auf meh-rere Knoten Es wird eine schnelle und einfache Datenreplikation gefordertdamit die Daten auch bei einem Kontenausfall noch vorhanden sind Die meis-ten NoSQL-Datenbanksysteme arbeiten damit erfolgreich Diese Vorausset-zung kommt zu Stande mit einer abgeschwaumlchten Konsistenzanforderung diein dem CAP-Theorem mit der Eigenschaft evenutally consistency vorhandenist Die Umsetzung erfolgt praktisch uumlber das BASE-Konsistenzmodell [12]

bull Einfache APISQL war sicherlich einfach deklarativ auch sehr ausdrucksstark und vor allemstandardisiert Der wesentlicher Nachteil bei vielen NoSQL-Datenbanksystemeist dass es zwar eine einfache API gibt aber nicht alle Funktionalitaumlten anbie-tet und somit nicht sehr bedeutsam Dadurch entsteht die Folge dass eineEntwicklung von Funktionalitaumlten fuumlr die Anwendung notwendig ist Zur Zeitentstehen neue Funktionalitaumlten die sich auch fuumlr Web20-Anwendungen eig-nen [12]

bull Kein ACID als KonsistenzmodellDie ACID-Eigenschaften verkomplizieren und verlangsamen die verteilte Da-tenhaltung und stellen somit ein Problem fuumlr NoSQL-Datenbanksysteme daDie Eigenschaft evenutally consistency ermoumlglicht den Ansatz dass Datenin den verschiedenen Knoten voruumlbergehend auch inkonsistent sein duumlrfenDieses Szenario kommt oft in den Internet-Anwendungen vor und nicht zumBeispiel sehr oft bei klassischen Geschaumlftsdaten in dem meistens relationaleDatenbanksysteme infrage kommen Es existieren auch Datenbanksystemedie sowohl mit ACID als auch mit BASE arbeiten koumlnnen [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 11: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Tabellenverzeichnis 11

AbkuumlrzungsverzeichnisRaspis Mehrere Geraumlte von Raspberry PiSEQUEL Structured English QUEred LanguageSQL Structured Query LanguageDDL Data Definition LanguageIBM International Business Machines CorporationGPS Global Positioning SystemNoSQL Not Only Structured Query LanguageMongoDB Mongo DatenbankSWOT Strengths Weaknesses Opportunities ThreatsBASE Basically Available Soft State Eventual consistencyFIFO First In - First OutSD Secure DigitalUSB Universal Serial BUSSSH Secure ShellGPIOS General-purpose inputoutputCRUD Create Read Update DeleteJSON JavaScript Object NotationBSON Binary JSONID IdentifikatorCPU Central Processing UnitGPU Graphics Processing UnitDHCP Dynamic Host Configuration ProtocolIP InternetprotokollAPT Advanced Packaging ToolTCP Transmission Control ProtocolHTTP Hypertext Transfer Protocol

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 12

1 Einleitung

Edgar Frank Codd gelingt es in den 1960er und 1970er Jahren ein groszliger Fortschrittmit der Entwicklung von den ersten relationalen Datenbanksystemen [1] In dieserZeit haben relationale Datenbanken immer mehr an Bedeutung gewonnen So ent-stand auch in den 1970er auch die Datenbanksprache SEQUEL (Structured EnglishQUEred Language) basierend auf den relationalen Datenbanken Spaumlter wurde je-doch die Sprache unbenannt in SQL (Structured Query Language) [2]

SQL und relationale Datenbanken arbeiten nach festen Tabellenschemen Einer derSprachelemente vom SQL ist Data Definition Language (DDL) DDL gibt vor zuerstdie Tabelle zu erstellen und nachtraumlglich gibt es die Moumlglichkeit auch Spalten undDatentypen zu erzeugen [3] Die Flexibilitaumlt von dem oben aufgefuumlhrten Schema istbegrenzt Die Menge der Datenmenge ist uumlber die Zeit stetig gewachsen Laut IBMentstehen jeden Tag um die 25 Trillionen Byte an Daten Das heiszligt dass 90 derDaten aus den letzten 2 Jahren entstanden sind Die groszligen Datenmengen entste-hen aus allen Bereichen wie zum Beispiel aus dem Internetbereich GPS-Technikund Sensortechnik [4] Dies fuumlhrt oft dazu dass Datenbankmanagementsystemeund Hardware an ihre Grenzen stoszligen Bewaumlltigung dieser groszligen Datenmengenstellten fuumlr Entwickler neue Herausforderungen Somit entstanden neue NoSQL-Technologien Dies war ein Einstieg fuumlr die Entwicklung von Google MapReduceund Hadoop von Yahoo [5] Diese damals neuen Technologien verarbeiteten besserdie groszligen Datenmengen als zuvor somit war es ein wichtiger Fortschritt [5] DieNoSQL-Welt spielt heute wesentlich eine groszlige Rolle fuumlr die Datenverarbeitung vonBig Data Somit ist der Begriff NoSQL nicht mehr wegzudenken aus der Datenbank-welt

NoSQL ist eine Abkuumlrzung fuumlr Not only SQL (nicht immer nur SQL) Dies be-deutet nicht dass man auf SQL bzw relationaler Datenbank verzichtet sondernauch Alternativen einbezieht zur SQL-Welt [6] NoSQL-Implementierungen sind inmehrere Kategorien unterteilt [6] die in dieser Bachelorarbeit naumlher erklaumlrt werdenMeistens werden groszlige Datenmengen schneller verarbeitet als im Gegensatz zurelationalen Datenbanken Immer mehr NoSQL-Datenbanken verbreiten sich Zur-zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7] Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank MongoDB Es handelt hierbei um eine quelloffene Software MongoDBverwendet fuumlr die Implementierung der Datenbank die Programmiersprache C++[8] Zudem gibt es zahlreiche Mongo-DB-Treiber die in den ProgrammiersprachenC C++ Java Ruby Phyton und PHP zu Verfuumlgung stehen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 13

Viele bekannte Groszligunternehmen wie Facebook Google Expedia und Bosch be-nutzen zurzeit MongoDB [9]

Der Begriff Mongo leitet sich vom englischen Wort humongous was uumlbersetzt be-deutet gigantisch oder wahnsinnig groszlig es wird auf den Volumen Aspekt vonBig Data hingedeutet [10] Zurzeit besteht keine exakte Definition fuumlr Big Data DasSoftwareunternehmen 10gen entwickelte im Jahr 2007 die erste Version von Mon-goDB Im Jahre 2013 kam es auch zu einer Namensaumlnderung des Softwareunter-nehmens die sich ebenfalls in MongoDB umbenannte Neben dem Volumen Aspektsind noch zwei weitere Velocity und Variety Aspekte vorhanden Besonders fuumlr dieBig-Data-Aspekte Volume und Velocity empfiehlt sich die Verwendung von verteiltenSystemen Der Begriff Big Data entstand im Jahr 2001 von Doug Laney (damaligenAnalysten der Meta Group) Laney definierte Big Data als Daten mit groszligem Volu-men (Volume) groszliger Vielfalt an Datenformaten (Variety) und groszligen Geschwin-digkeit (Velocity) mit der neue Daten entstehen [11]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 14

11 Aufbau

Die Bachelorarbeit gliedert sich in sechs Teilen Auf die Einleitung folgend widmetsich der zweite Teil mit der Entstehung und den Grundlagen von Raspberry Pi undMongoDB Weiterhin befasst sich das dritte Kapitel mit dem Aufbau InstallationKonfiguration und den dazugehoumlrigen Hardware- und Softwarekomponenten

Im Mittelpunkt des vierten Kapitels steht die Implementierung der Datenreplikationund Datenfragmentierung innerhalb eines Clusters Es werden hier die Funktionali-taumlten eines Cluster ausgefuumlhrt und ausgewertet

Das Kapitel 5 befasst sich mit den Aggregationsmethoden Der Schlussteil dieserArbeit endet mit einem Fazit

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 15

2 Technische Grundlagen

Das zweite Kapitel gibt einen Einblick in die Grundlagen von NoSQL-Datenbankenund Raspberry Pi

21 NoSQL-Definition

Bislang gibt es keine einheitliche und strikte Definition von NoSQL Den Versucheiner Definition haben die Autoren Edlich Friedland Hampe Brauer in ihrem Buch[12] vorgenommen Die besagt

bull Kein relationales DatenmodellEine Vielfaumlltigkeit der Modelle wird gefordert dies bedeutet dass das relatio-nale Modell nicht immer fuumlr jede Anforderung am besten geeignet ist Fuumlr Pro-jekte eignet sich die SWOT-Analyse (StrengthsStaumlrken WeaknessSchwauml-chen OpportunitiesChancen ThreatsBedrohungen) die analysiert welchesModell bzw Datenbanksystem infrage kommt [12]

bull Eignung fuumlr Systeme mit verteilter und horizontaler SkalierbarkeitRelationale Datenbanksysteme arbeiten in der Regel nachdem Scale-up Prin-zip bzw vertikale Skalierbarkeit in dem eine technische Aufruumlstung des Rech-ners stattfindet Im Gegensatz zu den relationalen Datenbanksysteme arbeitendie NoSQL-Datenbanksysteme oft nachdem Scale-out-Prinzip bzw horizon-tale Skalierbarkeit die eine schnellere Reaktionszeit auf Anfragen und Ma-nipulationen durch dynamisches Einbinden und Loumlschen von Rechnerknotenes ermoumlglichen Aufgrund einer vorhandenen Fehlertoleranz ist auch im vor-liegenden Fall ein Knotenfall ohne Konsequenz moumlglich Dadurch sinken dieAnschaffungskosten [12]

bull Quelloffene SoftwareDie meisten NoSQL-Datenbanksysteme sind quelloffen und koumlnnen dadurcheine Voraussetzung sein fuumlr eine SWOT-Analyse aber mit Sicherheit kein ent-scheidendes Argument [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 16

bull Frei von Schemen oder nur von schwaumlcheren Restriktionen betroffenDie Agilitaumlten der Datenstrukturen von Web20-Anwendungen muumlssen in derheutigen Zeit steigen Datenbanksysteme und Anwendungen muumlssen mit un-terschiedlich strukturierten Informationen im Web- und Dokumentbereich um-gehen koumlnnen Die Folge waumlre dass die Anwendung diese Schemainforma-tion zuruumlck verfolgen muumlsste Die Voraussetzung sind schnellere Reaktions-zeiten bei einer Schemaaumlnderung Schemaaumlnderungen koumlnnen nicht wie beiden relationalen Datenbanken ein System minuten- oder stundenlang auszligerBetrieb nehmen [12]

bull Einfache Datenreplikation zur Unterstuumltzung der verteilten ArchitekturDie Grundidee bei einer Datenreplikation ist die Verteilung der Daten auf meh-rere Knoten Es wird eine schnelle und einfache Datenreplikation gefordertdamit die Daten auch bei einem Kontenausfall noch vorhanden sind Die meis-ten NoSQL-Datenbanksysteme arbeiten damit erfolgreich Diese Vorausset-zung kommt zu Stande mit einer abgeschwaumlchten Konsistenzanforderung diein dem CAP-Theorem mit der Eigenschaft evenutally consistency vorhandenist Die Umsetzung erfolgt praktisch uumlber das BASE-Konsistenzmodell [12]

bull Einfache APISQL war sicherlich einfach deklarativ auch sehr ausdrucksstark und vor allemstandardisiert Der wesentlicher Nachteil bei vielen NoSQL-Datenbanksystemeist dass es zwar eine einfache API gibt aber nicht alle Funktionalitaumlten anbie-tet und somit nicht sehr bedeutsam Dadurch entsteht die Folge dass eineEntwicklung von Funktionalitaumlten fuumlr die Anwendung notwendig ist Zur Zeitentstehen neue Funktionalitaumlten die sich auch fuumlr Web20-Anwendungen eig-nen [12]

bull Kein ACID als KonsistenzmodellDie ACID-Eigenschaften verkomplizieren und verlangsamen die verteilte Da-tenhaltung und stellen somit ein Problem fuumlr NoSQL-Datenbanksysteme daDie Eigenschaft evenutally consistency ermoumlglicht den Ansatz dass Datenin den verschiedenen Knoten voruumlbergehend auch inkonsistent sein duumlrfenDieses Szenario kommt oft in den Internet-Anwendungen vor und nicht zumBeispiel sehr oft bei klassischen Geschaumlftsdaten in dem meistens relationaleDatenbanksysteme infrage kommen Es existieren auch Datenbanksystemedie sowohl mit ACID als auch mit BASE arbeiten koumlnnen [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 12: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 12

1 Einleitung

Edgar Frank Codd gelingt es in den 1960er und 1970er Jahren ein groszliger Fortschrittmit der Entwicklung von den ersten relationalen Datenbanksystemen [1] In dieserZeit haben relationale Datenbanken immer mehr an Bedeutung gewonnen So ent-stand auch in den 1970er auch die Datenbanksprache SEQUEL (Structured EnglishQUEred Language) basierend auf den relationalen Datenbanken Spaumlter wurde je-doch die Sprache unbenannt in SQL (Structured Query Language) [2]

SQL und relationale Datenbanken arbeiten nach festen Tabellenschemen Einer derSprachelemente vom SQL ist Data Definition Language (DDL) DDL gibt vor zuerstdie Tabelle zu erstellen und nachtraumlglich gibt es die Moumlglichkeit auch Spalten undDatentypen zu erzeugen [3] Die Flexibilitaumlt von dem oben aufgefuumlhrten Schema istbegrenzt Die Menge der Datenmenge ist uumlber die Zeit stetig gewachsen Laut IBMentstehen jeden Tag um die 25 Trillionen Byte an Daten Das heiszligt dass 90 derDaten aus den letzten 2 Jahren entstanden sind Die groszligen Datenmengen entste-hen aus allen Bereichen wie zum Beispiel aus dem Internetbereich GPS-Technikund Sensortechnik [4] Dies fuumlhrt oft dazu dass Datenbankmanagementsystemeund Hardware an ihre Grenzen stoszligen Bewaumlltigung dieser groszligen Datenmengenstellten fuumlr Entwickler neue Herausforderungen Somit entstanden neue NoSQL-Technologien Dies war ein Einstieg fuumlr die Entwicklung von Google MapReduceund Hadoop von Yahoo [5] Diese damals neuen Technologien verarbeiteten besserdie groszligen Datenmengen als zuvor somit war es ein wichtiger Fortschritt [5] DieNoSQL-Welt spielt heute wesentlich eine groszlige Rolle fuumlr die Datenverarbeitung vonBig Data Somit ist der Begriff NoSQL nicht mehr wegzudenken aus der Datenbank-welt

NoSQL ist eine Abkuumlrzung fuumlr Not only SQL (nicht immer nur SQL) Dies be-deutet nicht dass man auf SQL bzw relationaler Datenbank verzichtet sondernauch Alternativen einbezieht zur SQL-Welt [6] NoSQL-Implementierungen sind inmehrere Kategorien unterteilt [6] die in dieser Bachelorarbeit naumlher erklaumlrt werdenMeistens werden groszlige Datenmengen schneller verarbeitet als im Gegensatz zurelationalen Datenbanken Immer mehr NoSQL-Datenbanken verbreiten sich Zur-zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7] Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank MongoDB Es handelt hierbei um eine quelloffene Software MongoDBverwendet fuumlr die Implementierung der Datenbank die Programmiersprache C++[8] Zudem gibt es zahlreiche Mongo-DB-Treiber die in den ProgrammiersprachenC C++ Java Ruby Phyton und PHP zu Verfuumlgung stehen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 13

Viele bekannte Groszligunternehmen wie Facebook Google Expedia und Bosch be-nutzen zurzeit MongoDB [9]

Der Begriff Mongo leitet sich vom englischen Wort humongous was uumlbersetzt be-deutet gigantisch oder wahnsinnig groszlig es wird auf den Volumen Aspekt vonBig Data hingedeutet [10] Zurzeit besteht keine exakte Definition fuumlr Big Data DasSoftwareunternehmen 10gen entwickelte im Jahr 2007 die erste Version von Mon-goDB Im Jahre 2013 kam es auch zu einer Namensaumlnderung des Softwareunter-nehmens die sich ebenfalls in MongoDB umbenannte Neben dem Volumen Aspektsind noch zwei weitere Velocity und Variety Aspekte vorhanden Besonders fuumlr dieBig-Data-Aspekte Volume und Velocity empfiehlt sich die Verwendung von verteiltenSystemen Der Begriff Big Data entstand im Jahr 2001 von Doug Laney (damaligenAnalysten der Meta Group) Laney definierte Big Data als Daten mit groszligem Volu-men (Volume) groszliger Vielfalt an Datenformaten (Variety) und groszligen Geschwin-digkeit (Velocity) mit der neue Daten entstehen [11]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 14

11 Aufbau

Die Bachelorarbeit gliedert sich in sechs Teilen Auf die Einleitung folgend widmetsich der zweite Teil mit der Entstehung und den Grundlagen von Raspberry Pi undMongoDB Weiterhin befasst sich das dritte Kapitel mit dem Aufbau InstallationKonfiguration und den dazugehoumlrigen Hardware- und Softwarekomponenten

Im Mittelpunkt des vierten Kapitels steht die Implementierung der Datenreplikationund Datenfragmentierung innerhalb eines Clusters Es werden hier die Funktionali-taumlten eines Cluster ausgefuumlhrt und ausgewertet

Das Kapitel 5 befasst sich mit den Aggregationsmethoden Der Schlussteil dieserArbeit endet mit einem Fazit

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 15

2 Technische Grundlagen

Das zweite Kapitel gibt einen Einblick in die Grundlagen von NoSQL-Datenbankenund Raspberry Pi

21 NoSQL-Definition

Bislang gibt es keine einheitliche und strikte Definition von NoSQL Den Versucheiner Definition haben die Autoren Edlich Friedland Hampe Brauer in ihrem Buch[12] vorgenommen Die besagt

bull Kein relationales DatenmodellEine Vielfaumlltigkeit der Modelle wird gefordert dies bedeutet dass das relatio-nale Modell nicht immer fuumlr jede Anforderung am besten geeignet ist Fuumlr Pro-jekte eignet sich die SWOT-Analyse (StrengthsStaumlrken WeaknessSchwauml-chen OpportunitiesChancen ThreatsBedrohungen) die analysiert welchesModell bzw Datenbanksystem infrage kommt [12]

bull Eignung fuumlr Systeme mit verteilter und horizontaler SkalierbarkeitRelationale Datenbanksysteme arbeiten in der Regel nachdem Scale-up Prin-zip bzw vertikale Skalierbarkeit in dem eine technische Aufruumlstung des Rech-ners stattfindet Im Gegensatz zu den relationalen Datenbanksysteme arbeitendie NoSQL-Datenbanksysteme oft nachdem Scale-out-Prinzip bzw horizon-tale Skalierbarkeit die eine schnellere Reaktionszeit auf Anfragen und Ma-nipulationen durch dynamisches Einbinden und Loumlschen von Rechnerknotenes ermoumlglichen Aufgrund einer vorhandenen Fehlertoleranz ist auch im vor-liegenden Fall ein Knotenfall ohne Konsequenz moumlglich Dadurch sinken dieAnschaffungskosten [12]

bull Quelloffene SoftwareDie meisten NoSQL-Datenbanksysteme sind quelloffen und koumlnnen dadurcheine Voraussetzung sein fuumlr eine SWOT-Analyse aber mit Sicherheit kein ent-scheidendes Argument [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 16

bull Frei von Schemen oder nur von schwaumlcheren Restriktionen betroffenDie Agilitaumlten der Datenstrukturen von Web20-Anwendungen muumlssen in derheutigen Zeit steigen Datenbanksysteme und Anwendungen muumlssen mit un-terschiedlich strukturierten Informationen im Web- und Dokumentbereich um-gehen koumlnnen Die Folge waumlre dass die Anwendung diese Schemainforma-tion zuruumlck verfolgen muumlsste Die Voraussetzung sind schnellere Reaktions-zeiten bei einer Schemaaumlnderung Schemaaumlnderungen koumlnnen nicht wie beiden relationalen Datenbanken ein System minuten- oder stundenlang auszligerBetrieb nehmen [12]

bull Einfache Datenreplikation zur Unterstuumltzung der verteilten ArchitekturDie Grundidee bei einer Datenreplikation ist die Verteilung der Daten auf meh-rere Knoten Es wird eine schnelle und einfache Datenreplikation gefordertdamit die Daten auch bei einem Kontenausfall noch vorhanden sind Die meis-ten NoSQL-Datenbanksysteme arbeiten damit erfolgreich Diese Vorausset-zung kommt zu Stande mit einer abgeschwaumlchten Konsistenzanforderung diein dem CAP-Theorem mit der Eigenschaft evenutally consistency vorhandenist Die Umsetzung erfolgt praktisch uumlber das BASE-Konsistenzmodell [12]

bull Einfache APISQL war sicherlich einfach deklarativ auch sehr ausdrucksstark und vor allemstandardisiert Der wesentlicher Nachteil bei vielen NoSQL-Datenbanksystemeist dass es zwar eine einfache API gibt aber nicht alle Funktionalitaumlten anbie-tet und somit nicht sehr bedeutsam Dadurch entsteht die Folge dass eineEntwicklung von Funktionalitaumlten fuumlr die Anwendung notwendig ist Zur Zeitentstehen neue Funktionalitaumlten die sich auch fuumlr Web20-Anwendungen eig-nen [12]

bull Kein ACID als KonsistenzmodellDie ACID-Eigenschaften verkomplizieren und verlangsamen die verteilte Da-tenhaltung und stellen somit ein Problem fuumlr NoSQL-Datenbanksysteme daDie Eigenschaft evenutally consistency ermoumlglicht den Ansatz dass Datenin den verschiedenen Knoten voruumlbergehend auch inkonsistent sein duumlrfenDieses Szenario kommt oft in den Internet-Anwendungen vor und nicht zumBeispiel sehr oft bei klassischen Geschaumlftsdaten in dem meistens relationaleDatenbanksysteme infrage kommen Es existieren auch Datenbanksystemedie sowohl mit ACID als auch mit BASE arbeiten koumlnnen [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 13: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 13

Viele bekannte Groszligunternehmen wie Facebook Google Expedia und Bosch be-nutzen zurzeit MongoDB [9]

Der Begriff Mongo leitet sich vom englischen Wort humongous was uumlbersetzt be-deutet gigantisch oder wahnsinnig groszlig es wird auf den Volumen Aspekt vonBig Data hingedeutet [10] Zurzeit besteht keine exakte Definition fuumlr Big Data DasSoftwareunternehmen 10gen entwickelte im Jahr 2007 die erste Version von Mon-goDB Im Jahre 2013 kam es auch zu einer Namensaumlnderung des Softwareunter-nehmens die sich ebenfalls in MongoDB umbenannte Neben dem Volumen Aspektsind noch zwei weitere Velocity und Variety Aspekte vorhanden Besonders fuumlr dieBig-Data-Aspekte Volume und Velocity empfiehlt sich die Verwendung von verteiltenSystemen Der Begriff Big Data entstand im Jahr 2001 von Doug Laney (damaligenAnalysten der Meta Group) Laney definierte Big Data als Daten mit groszligem Volu-men (Volume) groszliger Vielfalt an Datenformaten (Variety) und groszligen Geschwin-digkeit (Velocity) mit der neue Daten entstehen [11]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 14

11 Aufbau

Die Bachelorarbeit gliedert sich in sechs Teilen Auf die Einleitung folgend widmetsich der zweite Teil mit der Entstehung und den Grundlagen von Raspberry Pi undMongoDB Weiterhin befasst sich das dritte Kapitel mit dem Aufbau InstallationKonfiguration und den dazugehoumlrigen Hardware- und Softwarekomponenten

Im Mittelpunkt des vierten Kapitels steht die Implementierung der Datenreplikationund Datenfragmentierung innerhalb eines Clusters Es werden hier die Funktionali-taumlten eines Cluster ausgefuumlhrt und ausgewertet

Das Kapitel 5 befasst sich mit den Aggregationsmethoden Der Schlussteil dieserArbeit endet mit einem Fazit

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 15

2 Technische Grundlagen

Das zweite Kapitel gibt einen Einblick in die Grundlagen von NoSQL-Datenbankenund Raspberry Pi

21 NoSQL-Definition

Bislang gibt es keine einheitliche und strikte Definition von NoSQL Den Versucheiner Definition haben die Autoren Edlich Friedland Hampe Brauer in ihrem Buch[12] vorgenommen Die besagt

bull Kein relationales DatenmodellEine Vielfaumlltigkeit der Modelle wird gefordert dies bedeutet dass das relatio-nale Modell nicht immer fuumlr jede Anforderung am besten geeignet ist Fuumlr Pro-jekte eignet sich die SWOT-Analyse (StrengthsStaumlrken WeaknessSchwauml-chen OpportunitiesChancen ThreatsBedrohungen) die analysiert welchesModell bzw Datenbanksystem infrage kommt [12]

bull Eignung fuumlr Systeme mit verteilter und horizontaler SkalierbarkeitRelationale Datenbanksysteme arbeiten in der Regel nachdem Scale-up Prin-zip bzw vertikale Skalierbarkeit in dem eine technische Aufruumlstung des Rech-ners stattfindet Im Gegensatz zu den relationalen Datenbanksysteme arbeitendie NoSQL-Datenbanksysteme oft nachdem Scale-out-Prinzip bzw horizon-tale Skalierbarkeit die eine schnellere Reaktionszeit auf Anfragen und Ma-nipulationen durch dynamisches Einbinden und Loumlschen von Rechnerknotenes ermoumlglichen Aufgrund einer vorhandenen Fehlertoleranz ist auch im vor-liegenden Fall ein Knotenfall ohne Konsequenz moumlglich Dadurch sinken dieAnschaffungskosten [12]

bull Quelloffene SoftwareDie meisten NoSQL-Datenbanksysteme sind quelloffen und koumlnnen dadurcheine Voraussetzung sein fuumlr eine SWOT-Analyse aber mit Sicherheit kein ent-scheidendes Argument [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 16

bull Frei von Schemen oder nur von schwaumlcheren Restriktionen betroffenDie Agilitaumlten der Datenstrukturen von Web20-Anwendungen muumlssen in derheutigen Zeit steigen Datenbanksysteme und Anwendungen muumlssen mit un-terschiedlich strukturierten Informationen im Web- und Dokumentbereich um-gehen koumlnnen Die Folge waumlre dass die Anwendung diese Schemainforma-tion zuruumlck verfolgen muumlsste Die Voraussetzung sind schnellere Reaktions-zeiten bei einer Schemaaumlnderung Schemaaumlnderungen koumlnnen nicht wie beiden relationalen Datenbanken ein System minuten- oder stundenlang auszligerBetrieb nehmen [12]

bull Einfache Datenreplikation zur Unterstuumltzung der verteilten ArchitekturDie Grundidee bei einer Datenreplikation ist die Verteilung der Daten auf meh-rere Knoten Es wird eine schnelle und einfache Datenreplikation gefordertdamit die Daten auch bei einem Kontenausfall noch vorhanden sind Die meis-ten NoSQL-Datenbanksysteme arbeiten damit erfolgreich Diese Vorausset-zung kommt zu Stande mit einer abgeschwaumlchten Konsistenzanforderung diein dem CAP-Theorem mit der Eigenschaft evenutally consistency vorhandenist Die Umsetzung erfolgt praktisch uumlber das BASE-Konsistenzmodell [12]

bull Einfache APISQL war sicherlich einfach deklarativ auch sehr ausdrucksstark und vor allemstandardisiert Der wesentlicher Nachteil bei vielen NoSQL-Datenbanksystemeist dass es zwar eine einfache API gibt aber nicht alle Funktionalitaumlten anbie-tet und somit nicht sehr bedeutsam Dadurch entsteht die Folge dass eineEntwicklung von Funktionalitaumlten fuumlr die Anwendung notwendig ist Zur Zeitentstehen neue Funktionalitaumlten die sich auch fuumlr Web20-Anwendungen eig-nen [12]

bull Kein ACID als KonsistenzmodellDie ACID-Eigenschaften verkomplizieren und verlangsamen die verteilte Da-tenhaltung und stellen somit ein Problem fuumlr NoSQL-Datenbanksysteme daDie Eigenschaft evenutally consistency ermoumlglicht den Ansatz dass Datenin den verschiedenen Knoten voruumlbergehend auch inkonsistent sein duumlrfenDieses Szenario kommt oft in den Internet-Anwendungen vor und nicht zumBeispiel sehr oft bei klassischen Geschaumlftsdaten in dem meistens relationaleDatenbanksysteme infrage kommen Es existieren auch Datenbanksystemedie sowohl mit ACID als auch mit BASE arbeiten koumlnnen [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 14: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 14

11 Aufbau

Die Bachelorarbeit gliedert sich in sechs Teilen Auf die Einleitung folgend widmetsich der zweite Teil mit der Entstehung und den Grundlagen von Raspberry Pi undMongoDB Weiterhin befasst sich das dritte Kapitel mit dem Aufbau InstallationKonfiguration und den dazugehoumlrigen Hardware- und Softwarekomponenten

Im Mittelpunkt des vierten Kapitels steht die Implementierung der Datenreplikationund Datenfragmentierung innerhalb eines Clusters Es werden hier die Funktionali-taumlten eines Cluster ausgefuumlhrt und ausgewertet

Das Kapitel 5 befasst sich mit den Aggregationsmethoden Der Schlussteil dieserArbeit endet mit einem Fazit

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 15

2 Technische Grundlagen

Das zweite Kapitel gibt einen Einblick in die Grundlagen von NoSQL-Datenbankenund Raspberry Pi

21 NoSQL-Definition

Bislang gibt es keine einheitliche und strikte Definition von NoSQL Den Versucheiner Definition haben die Autoren Edlich Friedland Hampe Brauer in ihrem Buch[12] vorgenommen Die besagt

bull Kein relationales DatenmodellEine Vielfaumlltigkeit der Modelle wird gefordert dies bedeutet dass das relatio-nale Modell nicht immer fuumlr jede Anforderung am besten geeignet ist Fuumlr Pro-jekte eignet sich die SWOT-Analyse (StrengthsStaumlrken WeaknessSchwauml-chen OpportunitiesChancen ThreatsBedrohungen) die analysiert welchesModell bzw Datenbanksystem infrage kommt [12]

bull Eignung fuumlr Systeme mit verteilter und horizontaler SkalierbarkeitRelationale Datenbanksysteme arbeiten in der Regel nachdem Scale-up Prin-zip bzw vertikale Skalierbarkeit in dem eine technische Aufruumlstung des Rech-ners stattfindet Im Gegensatz zu den relationalen Datenbanksysteme arbeitendie NoSQL-Datenbanksysteme oft nachdem Scale-out-Prinzip bzw horizon-tale Skalierbarkeit die eine schnellere Reaktionszeit auf Anfragen und Ma-nipulationen durch dynamisches Einbinden und Loumlschen von Rechnerknotenes ermoumlglichen Aufgrund einer vorhandenen Fehlertoleranz ist auch im vor-liegenden Fall ein Knotenfall ohne Konsequenz moumlglich Dadurch sinken dieAnschaffungskosten [12]

bull Quelloffene SoftwareDie meisten NoSQL-Datenbanksysteme sind quelloffen und koumlnnen dadurcheine Voraussetzung sein fuumlr eine SWOT-Analyse aber mit Sicherheit kein ent-scheidendes Argument [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 16

bull Frei von Schemen oder nur von schwaumlcheren Restriktionen betroffenDie Agilitaumlten der Datenstrukturen von Web20-Anwendungen muumlssen in derheutigen Zeit steigen Datenbanksysteme und Anwendungen muumlssen mit un-terschiedlich strukturierten Informationen im Web- und Dokumentbereich um-gehen koumlnnen Die Folge waumlre dass die Anwendung diese Schemainforma-tion zuruumlck verfolgen muumlsste Die Voraussetzung sind schnellere Reaktions-zeiten bei einer Schemaaumlnderung Schemaaumlnderungen koumlnnen nicht wie beiden relationalen Datenbanken ein System minuten- oder stundenlang auszligerBetrieb nehmen [12]

bull Einfache Datenreplikation zur Unterstuumltzung der verteilten ArchitekturDie Grundidee bei einer Datenreplikation ist die Verteilung der Daten auf meh-rere Knoten Es wird eine schnelle und einfache Datenreplikation gefordertdamit die Daten auch bei einem Kontenausfall noch vorhanden sind Die meis-ten NoSQL-Datenbanksysteme arbeiten damit erfolgreich Diese Vorausset-zung kommt zu Stande mit einer abgeschwaumlchten Konsistenzanforderung diein dem CAP-Theorem mit der Eigenschaft evenutally consistency vorhandenist Die Umsetzung erfolgt praktisch uumlber das BASE-Konsistenzmodell [12]

bull Einfache APISQL war sicherlich einfach deklarativ auch sehr ausdrucksstark und vor allemstandardisiert Der wesentlicher Nachteil bei vielen NoSQL-Datenbanksystemeist dass es zwar eine einfache API gibt aber nicht alle Funktionalitaumlten anbie-tet und somit nicht sehr bedeutsam Dadurch entsteht die Folge dass eineEntwicklung von Funktionalitaumlten fuumlr die Anwendung notwendig ist Zur Zeitentstehen neue Funktionalitaumlten die sich auch fuumlr Web20-Anwendungen eig-nen [12]

bull Kein ACID als KonsistenzmodellDie ACID-Eigenschaften verkomplizieren und verlangsamen die verteilte Da-tenhaltung und stellen somit ein Problem fuumlr NoSQL-Datenbanksysteme daDie Eigenschaft evenutally consistency ermoumlglicht den Ansatz dass Datenin den verschiedenen Knoten voruumlbergehend auch inkonsistent sein duumlrfenDieses Szenario kommt oft in den Internet-Anwendungen vor und nicht zumBeispiel sehr oft bei klassischen Geschaumlftsdaten in dem meistens relationaleDatenbanksysteme infrage kommen Es existieren auch Datenbanksystemedie sowohl mit ACID als auch mit BASE arbeiten koumlnnen [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 15: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 15

2 Technische Grundlagen

Das zweite Kapitel gibt einen Einblick in die Grundlagen von NoSQL-Datenbankenund Raspberry Pi

21 NoSQL-Definition

Bislang gibt es keine einheitliche und strikte Definition von NoSQL Den Versucheiner Definition haben die Autoren Edlich Friedland Hampe Brauer in ihrem Buch[12] vorgenommen Die besagt

bull Kein relationales DatenmodellEine Vielfaumlltigkeit der Modelle wird gefordert dies bedeutet dass das relatio-nale Modell nicht immer fuumlr jede Anforderung am besten geeignet ist Fuumlr Pro-jekte eignet sich die SWOT-Analyse (StrengthsStaumlrken WeaknessSchwauml-chen OpportunitiesChancen ThreatsBedrohungen) die analysiert welchesModell bzw Datenbanksystem infrage kommt [12]

bull Eignung fuumlr Systeme mit verteilter und horizontaler SkalierbarkeitRelationale Datenbanksysteme arbeiten in der Regel nachdem Scale-up Prin-zip bzw vertikale Skalierbarkeit in dem eine technische Aufruumlstung des Rech-ners stattfindet Im Gegensatz zu den relationalen Datenbanksysteme arbeitendie NoSQL-Datenbanksysteme oft nachdem Scale-out-Prinzip bzw horizon-tale Skalierbarkeit die eine schnellere Reaktionszeit auf Anfragen und Ma-nipulationen durch dynamisches Einbinden und Loumlschen von Rechnerknotenes ermoumlglichen Aufgrund einer vorhandenen Fehlertoleranz ist auch im vor-liegenden Fall ein Knotenfall ohne Konsequenz moumlglich Dadurch sinken dieAnschaffungskosten [12]

bull Quelloffene SoftwareDie meisten NoSQL-Datenbanksysteme sind quelloffen und koumlnnen dadurcheine Voraussetzung sein fuumlr eine SWOT-Analyse aber mit Sicherheit kein ent-scheidendes Argument [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 16

bull Frei von Schemen oder nur von schwaumlcheren Restriktionen betroffenDie Agilitaumlten der Datenstrukturen von Web20-Anwendungen muumlssen in derheutigen Zeit steigen Datenbanksysteme und Anwendungen muumlssen mit un-terschiedlich strukturierten Informationen im Web- und Dokumentbereich um-gehen koumlnnen Die Folge waumlre dass die Anwendung diese Schemainforma-tion zuruumlck verfolgen muumlsste Die Voraussetzung sind schnellere Reaktions-zeiten bei einer Schemaaumlnderung Schemaaumlnderungen koumlnnen nicht wie beiden relationalen Datenbanken ein System minuten- oder stundenlang auszligerBetrieb nehmen [12]

bull Einfache Datenreplikation zur Unterstuumltzung der verteilten ArchitekturDie Grundidee bei einer Datenreplikation ist die Verteilung der Daten auf meh-rere Knoten Es wird eine schnelle und einfache Datenreplikation gefordertdamit die Daten auch bei einem Kontenausfall noch vorhanden sind Die meis-ten NoSQL-Datenbanksysteme arbeiten damit erfolgreich Diese Vorausset-zung kommt zu Stande mit einer abgeschwaumlchten Konsistenzanforderung diein dem CAP-Theorem mit der Eigenschaft evenutally consistency vorhandenist Die Umsetzung erfolgt praktisch uumlber das BASE-Konsistenzmodell [12]

bull Einfache APISQL war sicherlich einfach deklarativ auch sehr ausdrucksstark und vor allemstandardisiert Der wesentlicher Nachteil bei vielen NoSQL-Datenbanksystemeist dass es zwar eine einfache API gibt aber nicht alle Funktionalitaumlten anbie-tet und somit nicht sehr bedeutsam Dadurch entsteht die Folge dass eineEntwicklung von Funktionalitaumlten fuumlr die Anwendung notwendig ist Zur Zeitentstehen neue Funktionalitaumlten die sich auch fuumlr Web20-Anwendungen eig-nen [12]

bull Kein ACID als KonsistenzmodellDie ACID-Eigenschaften verkomplizieren und verlangsamen die verteilte Da-tenhaltung und stellen somit ein Problem fuumlr NoSQL-Datenbanksysteme daDie Eigenschaft evenutally consistency ermoumlglicht den Ansatz dass Datenin den verschiedenen Knoten voruumlbergehend auch inkonsistent sein duumlrfenDieses Szenario kommt oft in den Internet-Anwendungen vor und nicht zumBeispiel sehr oft bei klassischen Geschaumlftsdaten in dem meistens relationaleDatenbanksysteme infrage kommen Es existieren auch Datenbanksystemedie sowohl mit ACID als auch mit BASE arbeiten koumlnnen [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 16: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 16

bull Frei von Schemen oder nur von schwaumlcheren Restriktionen betroffenDie Agilitaumlten der Datenstrukturen von Web20-Anwendungen muumlssen in derheutigen Zeit steigen Datenbanksysteme und Anwendungen muumlssen mit un-terschiedlich strukturierten Informationen im Web- und Dokumentbereich um-gehen koumlnnen Die Folge waumlre dass die Anwendung diese Schemainforma-tion zuruumlck verfolgen muumlsste Die Voraussetzung sind schnellere Reaktions-zeiten bei einer Schemaaumlnderung Schemaaumlnderungen koumlnnen nicht wie beiden relationalen Datenbanken ein System minuten- oder stundenlang auszligerBetrieb nehmen [12]

bull Einfache Datenreplikation zur Unterstuumltzung der verteilten ArchitekturDie Grundidee bei einer Datenreplikation ist die Verteilung der Daten auf meh-rere Knoten Es wird eine schnelle und einfache Datenreplikation gefordertdamit die Daten auch bei einem Kontenausfall noch vorhanden sind Die meis-ten NoSQL-Datenbanksysteme arbeiten damit erfolgreich Diese Vorausset-zung kommt zu Stande mit einer abgeschwaumlchten Konsistenzanforderung diein dem CAP-Theorem mit der Eigenschaft evenutally consistency vorhandenist Die Umsetzung erfolgt praktisch uumlber das BASE-Konsistenzmodell [12]

bull Einfache APISQL war sicherlich einfach deklarativ auch sehr ausdrucksstark und vor allemstandardisiert Der wesentlicher Nachteil bei vielen NoSQL-Datenbanksystemeist dass es zwar eine einfache API gibt aber nicht alle Funktionalitaumlten anbie-tet und somit nicht sehr bedeutsam Dadurch entsteht die Folge dass eineEntwicklung von Funktionalitaumlten fuumlr die Anwendung notwendig ist Zur Zeitentstehen neue Funktionalitaumlten die sich auch fuumlr Web20-Anwendungen eig-nen [12]

bull Kein ACID als KonsistenzmodellDie ACID-Eigenschaften verkomplizieren und verlangsamen die verteilte Da-tenhaltung und stellen somit ein Problem fuumlr NoSQL-Datenbanksysteme daDie Eigenschaft evenutally consistency ermoumlglicht den Ansatz dass Datenin den verschiedenen Knoten voruumlbergehend auch inkonsistent sein duumlrfenDieses Szenario kommt oft in den Internet-Anwendungen vor und nicht zumBeispiel sehr oft bei klassischen Geschaumlftsdaten in dem meistens relationaleDatenbanksysteme infrage kommen Es existieren auch Datenbanksystemedie sowohl mit ACID als auch mit BASE arbeiten koumlnnen [12]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 17: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 17

22 CAP-Theorem

Ein wichtiger Aspekt der verteilten Datenbanksysteme ist das CAP-Theorem DasCAP-Theorem besagt dass nicht alle verteilten Eigenschaften wie Konsistenz (Con-sistency) Verfuumlgbarkeit (Availability) und Toleranz (Partition Tolerance) gleichzei-tig zu gewaumlhrleisten sind Somit koumlnnen nur maximal zwei von drei Eigenschaftengleichzeitig vorhanden sein [13]

Abbildung 1 Veranschaulichung des CAP-Theorems

bull ConsistencyAlle Knoten verfuumlgen gleichzeitig uumlber die gleichen Daten [13]

bull AvailbilityLese- und Schreibzugriffe sind jederzeit verfuumlgbar Ein Knotenausfall wirkt sichnicht aus auf die Verfuumlgbarkeit [13]

bull Partition ToleranceDas System funktioniert auch bei einem Ausfall einzelner Knoten [13]

Die meisten NoSQL-Datenbanken koumlnnen durch ihre hohe Verteilung nicht auf Par-tition Tolerance verzichten [6] MongoDB verwendet diese Eigenschaft durch replicasets [13] Die zweite Eigenschaft von MongoDB ist die Consistency dadurch ist dasSystem nicht immer vorhanden zum Beispiel bei einer Replikation aber die Datenbleiben konsistent Bei der Eigenschaft Availability koumlnnen die Daten unterschied-lich sein aber dafuumlr sind sie immer verfuumlgbar Somit gehoumlrt MongoDB zur den CP-Kategorie Relationale Datenbanksysteme zaumlhlen meistens zur der CA-Kategorie[6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 18: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 18

23 BASE

BASE steht fuumlr die Abkuumlrzung Basically Available Soft State Eventual consisten-cy und ist basierend auf NoSQL-Datenbanken Es dient als Gegensatz zu ACID-Prinzip dass fuumlr relationale Datenbanken basiert BASE fuumlhrt dazu dass das verteil-te System nach einer moumlglichst kurzen Zeitspanne der Inkonsistenz letztlich wiederin demselben konsistenten Zustand zuruumlckfuumlhrt Ein Beispiel hierfuumlr ist die Master-Slave-Replikation Ein Knoten stellt den Master-Knoten und die anderen Knoten sindals Slave-Knoten zu betrachten Der Master-Knoten repliziert Daten auf die anderenSlave-Knoten Schreibzugriffe sind nur bei Master-Knoten vorhanden Lesezugriffesind bei allen Knoten vorhanden Bei Datenaumlnderung sind zunaumlchst die veraumlndertenDaten aus Sicht des Slave-Knoten nicht zu sehen Erst nach der Vollendung dieserReplikation sind die geaumlnderten Daten fuumlr alle Knoten sichtbar Der Ablauf verlaumluftasynchron [14]

24 NoSQL-Datenbanken-Vergleich

Bei den NoSQL-Datenbanken gibt es verschiedene Kategorien und Unterkatego-rien In diesem Umfeld existieren verschiedene Anbieter und Konzepte FolgendeKategorien sind bei NoSQL-Datenbanken bedeutend

bull Spaltenorientierte Datenbanken (englisch Wide Column Stores)Daten werden durch Datensaumltze mit potenziell sehr vielen dynamischen Spal-ten gespeichert Es besteht eine Aumlhnlichkeit mit Key-Value [6]

bull Dokumentenorientierte Datenbanken (englisch Document Stores Database)Die NoSQL-Datenbank MongoDB die in dieser Bachelorarbeit zum Einsatzkommt ist eine dokumentenorientierte Datenbank Es handelt sich dabei nichtum typische Dokumente wie zum Beispiel Word oder PDF-Dokumente son-dern von MongoDB JSON-Dokumente JSON steht fuumlr die Abkuumlrzung JavaS-cript Object Notation [13]

bull Key-Value-DatenbankenKeyValue-Datenbankysteme benutzen ein einfaches Schluumlssel- und Wertsche-ma Zu jedem Wert ist ein bestimmter Schluumlssel zugewiesen der aus einerstrukturierten oder beliebige Zeichenkette besteht Ein Schluumlssel ist in Na-mensraumlume sowie in Datenbanken aufgeteilt Die Werte des Systems die sichauch Values nennen koumlnnen neben Strings auch Listen Sets oder Hashesenthalten [15]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 19: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 19

bull Graphendatenbanken)Es handelt sich um eine Datenbank die Graphen verwendet Die Graphenbestehen aus Knoten und Kanten Im Gegensatz zu den anderen NoSQL-Anbietern erfolgt der Zugriff auf einen bestimmten Knoten oder in einer Mengevon Knoten anstatt auf eine eindeutige ID [6]

Die nachfolgende Tabelle zeigt eine Auswahl von NoSQL-Anbieter einschlieszliglich derzugeordneten Kategorien [16]

Spaltenorientierte Datenbanken Apache HBase Cassandra Amazon SimpleDB

Dokumentenorientierte Datenbanken MongoDB CouchDB OrientDB

Key-Value-Datenbanken Oracle NoSQL Database DynamoDB Redis

Graphdatenbanken Neo4J Sparksee TITAN

Multi-Model-Datenbanken ArangoDB OrientDB GunDB

Tabelle 1 NoSQL-Anbieter

25 MongoDB-Struktur

Folgende Abbildung zeigt den Aufbau einer MongoDB-Struktur Ein MongoDB-Serverkann bis zu mehrere logische Datenbanken verwalten Die Bearbeitung von Daten-banken kann individuell mit den Einstellungen separat erfolgen Eine Datenbank beiMongoDB ist zum Beispiel aus folgenden Dateien aufgebaut(Datenbankname0Datenbankname1) und Namespace-File (Datenbanknamens) [8]

Abbildung 2 MongoDB-Struktur

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 20: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 20

251 BSON

Dokumente sind in BSON-Format enthalten In einer Namespace-Datei sind alleCollections und Metadaten aufgelistet BSON steht fuumlr die Abkuumlrzung Binary JSONHierbei handelt sich um eine binaumlre Erweiterung von JSON [6] Die Vorteile sindgegenuumlber JSON [6]

bull Bessere Reversierbarkeit

bull Stabile Speicherung von bestimmten Datentypen

bull Erweiterung fuumlr weitere Datentypen wie zum Beispiel Integer- und Datumstypen

Ein JSON-Dokument kann beliebig viele Felder haben denen ein Wert zugeordnetist Dabei kann der Wert mehrere Werte mit unterschiedlichen Datentypen erhaltenwie man im folgenden Beispiel sieht

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907

Das JSON-Format eignet sich auch fuumlr komplexere Datentypen mittels Subdoku-mente Bei Subdokumenten handelt es sich um beliebige Schachtelungen innerhalbeines Dokumentes die es erlauben Unterattribute zu modellieren [13] Das folgendeBeispiel zeigt ein Subdokument kontaktdaten mit den zwei Feldern handynummerund email

vorname Danijelnachname Klaicstudiengang Informatikmatrikelnummer 996907kontaktdaten handynummer 015784492739email dklaicgmxde

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 21: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 21

252 ObjectID und Primaumlrschluumlssel

Jedes Dokument verfuumlgt eine eindeutige Identifizierung mit dem Datentyp ObjectIDdie auch als Primaumlrschluumlssel dient Auszligerdem dient es auch zur Lokalisierung desDokuments Die Groumlszlige einer ObjectID betraumlgt zwoumllf Bytes und besteht aus 24 he-xadezimalen Zeichen [6] wie im folgenden Beispiel

Abbildung 3 ObjectID-Beispiel

Die ersten vier Bytes sind fuumlr den Zeitstempel reserviert das die Sekunden seit111970 auffasst Die darauffolgenden drei Bytes leiten sich aus dem Maschineni-dentifikationscode ab Die naumlchsten zwei Bytes stehen fuumlr eine gegenwaumlrtige Prozess-ID Die letzten drei Bytes stehen fuumlr den Zaumlhler und uumlbernehmen einen ZufallswertEs besteht auch die Moumlglichkeit eine eigene ID zu erzeugen Da jedes Dokumentein Feld besitzt mit dem _id das fuumlr die Aufnahme des Primaumlrschluumlssels dient [13]Im folgenden Beispiel zeigt die manuelle Eingabe einer selbst erzeugten ID

dbstudenteninsert(_id1 vornameDanijel nachnameKlaic studien-gangInformatik matrikelnummer996907)

Es empfiehlt sich bei groszligen Datenmengen die vom Treiber erzeugte ObjectID zuverwenden da es unter Umstaumlnden zu Kollisionen fuumlhren kann

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 22: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 22

253 Datentypen

JSON-Format unterstuumltzt folgende Datentypen [13]

Datentypen BeispielObjectID Siehe Kapitel 222String Eine Reihe von Buchstaben Zahlen und Sonderzeichen die in

Anfuumlhrungszeichen abgeschlossen sindInteger Double Zahlen oder Kommazahlen die in Anfuumlhrungszeichen

abgeschlossen sindBoolean true oder falseAray Eine sortiere Liste von Werten mit beliebigen DatentypenDate Zeigt ein Datum mit Uhrzeit und Zeitinformationen an Das

Kommando newdate() zeigt den aktuellen ZeitstempelNull Der Wert null steht fuumlr ein reserviertes Feld Soll das Feld leer

sein so erkennt der Benutzer dass keine Eingabe erfolgte

Tabelle 2 Datenypen

254 Collection

Eine Collection aumlhnelt der Tabelle einer relationalen Datenbank Der wesentlicheUnterschied ist dabei dass die Dokumente keine technischen Voraussetzungen be-noumltigen Somit nennt man diesen Zustand Schemafreiheit Die Erstellung von Col-lections verlaumluft erst nach Bedarf Durch eine Punktnotation erfolgt die Gruppen undHierarchien Anordnung [6]BeispielCollection 1 europadeutschlandhessenCollection 2 europadeutschlandbayern

Das obige Beispiel zeigt zwei unterschiedliche Collections Der Namenspaces eu-ropadeutschland steht fuumlr Zuordnung der Gruppe

MongoDB unterscheidet zwischen zwei Formen von Collections [6] System Col-lections und Capped Collections

Capped Collection ist eine Collection mit definierter Groumlszlige oder Anzahl der Do-kumente Sollte die jeweilige Grenze uumlberschritten sein durch das Einfuumlgen vonneuer Dokumenten kommt das FIFO-Prinzip (First In - First Out) zum Einsatz undloumlscht die aumllteren Dokumente [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 23: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 23

Folgende Tabelle zeigt Informationen an die in einer System Collections enthaltensind [6]

Name Bedeutungsystemindexex Listet alle Indizes einer Datenbank auf die in jedem einzelnen

Collection angelegt sindsystemnamespaces Hier befinden sich eine Liste mit allen Namespaces von den

Datenbanken die sich aus den Indizes herleitensystemprofile Diese Collection entsteht durch die Aktivierung des

Profiling in dem es mehr Informationen uumlber die Datenbanksammelt

systemusers Diese Collection entsteht durch die Aktiverung desAufthentizerung Hier befinden sich alle Informationenuumlber den Benutzer

systemroles Listet die Definition von benutzerspezifischen Rollensystemjs JavaScript-Variablen und Funktionen koumlnnen zentral abgelegt

werden

Tabelle 3 System Collections

255 CRUD

Bekanntlich benutzt MongoDB keine uumlbliche Abfragesprache wie SQL stattdes-sen kommt eine von JavaScript implementierte Abfragesprache zum Einsatz DasJavaScript-Objekt db ist ein wichtiges Element und selektiert in der Mongo Shell dieaktuelle Datenbank [6][17] CRUD steht fuumlr die vier grundlegenden Datenbankope-rationen und sind auch bei MongoDB enthalten Folgende Tabelle zeigt die CRUD-Operationen

Create Datensaumltze erzeugen insertRead Datensaumltze lesen findUpdate Datensaumltze aktualisieren updateDelete Datensaumltze loumlschen remove

Tabelle 4 CRUD-Operationen

Nachfolgender Text zeigt die Manipulation von Dokumenten wie man Dokumenteeinfuumlgt aumlndert und loumlscht

Create Das Einfuumlgen von neuen Dokumenten erfolgt uumlber die Kommando insert()Als Parameter erwartet die Funktion ein BSON-Dokument welches in die angege-bene Collection eingefuumlgt wird Falls die Collection nicht existiert wird diese ange-legt [13]gtdbpersoneninsert(nachnameKlaic vornameDanijel)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 24: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 24

Read Die Lesezugriffe erfolgen uumlber das Kommando find() Ohne Bekanntgabedes Parameters listet Kommando find() alle Dokumente der angegebenen Collectionauf Andernfalls nimmt der erste Parameter die Rolle des Selektors ein waumlhrend derzweite Parameter die Ergebnisse wiedergibt [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Update Aumlnderungen an den Dokumenten funktionieren uumlber das Kommando up-date() find Aumlhnlich wie beim find() Kommando ist der erste Parameter ein SelektorDie Aumlnderungen finden bei allen Dokumenten statt die dem Muster des Selektorsentsprechen und sich im zweiten Parameter befinden [13]gtdbpersonenfind()gtdbpersonenfind(vornameDanijel)

Delete Das Loumlschen der Dokumenten funktioniert uumlber das Kommando deleteDas delete() Kommando funktioniert aumlhnlich wie das find() Kommando nur ohneProjektion Das heiszligt es wird lediglich ein Selektor uumlbergeben Eine vollstaumlndigeLoumlschung gibt es dem entsprechend nur wenn die Kriterien des Selektors entspre-chen [13]gtdbpersonenreomove(vornameDanijel)

26 Raspberry Pi

Raspberry Pi ist ein Einplatinencomputer von dem britischen Unternehmen Raspber-ry Pi Foundation Dieser Einplatinencomputer sollte es dazu bringen in britischenSchulen groumlszligeres Interesse fuumlr das Programmieren zu wecken Schnell expandierteder Einplatinencomputer weltweit und entwickelte sich zu einem groszligen Markterfolg[5] Es ermoumlglicht ein Umfeld zum Experimentieren und Fehler zu machen ohneVerluste in Kauf nehmen zu muumlssen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 25: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 25

261 Raspberry Pi 3 Modell B

Fuumlr diese Bachelorarbeit kommt das Model Raspberry Pi 3 Modell B zum EinsatzIm Gegensatz zu den Vorgaumlngern bringt das neue Model mehr Leistung und eineWireless Konitkivitaumlt mit sich Die folgende Tabelle zeigt die technische Daten vomRaspberry Pi 3 Model B

Prozessor Broadcom BCM2837CPU 12GHz 64-bit quad-core ARMv8GPU 400 MHz VideoCore IVArbeitsspeicher 1 GB RAM LPDDR2-900 SDRAMKommunikationsarten LAN 10100 Mbps 80211n Wireless LAN und Bluetooth 41Schnittstellen 4 x USB 20 1 x HDMI 1 x CSI Camera Port

DSI Display Port Stereo Out microSD PortAbmessungen Maszlige 856 x 565 MillimeterGewicht Ca 45 Gramm

Tabelle 5 Technische Daten vom Raspberry Pi 3 Model B

Abbildung 4 zeigt einen Raspberry Pi 3 Modell B Wie man auf dem Bild erkennenkann verfuumlgt der Raspberry Pi 40 GPIOS-Pins Sie dienen fuumlr die Steuerung undMessung von technischen Geraumlten und spielen keine Rolle fuumlr diese Bachelorarbeit

Abbildung 4 Raspberry Pi 3 Modell B1

1Bildquelle httpsjavatutorialnetwp-contentuploads201603RaspberryPi-3-Model-Bjpg

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 26: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 26

3 Aufbau und Installation eines Clusters mit derNoSQL-Datenbank MongoDB auf Basis vonRaspberry Pi Einplatinencomputern

Das folgende Kapitel befasst sich mit dem Aufbau und der Installation eines Clustersmit der NoSQL-Datenbank MongoDB sowie mit den eingesetzten Hardware- undSoftwarekomponenten

31 Hardware- und Softwarekomponenten

Fuumlr die Durchfuumlhrung dieser Bachelorarbeit kommen drei Raspis zum Einsatz Wei-terhin wird zusaumltzlich zu jedem Raspberry Pi eine SD-Speicherkarte eingelegt Diesist notwendig um ein Betriebssystem auf den Raspberry Pi zu schreiben Anstelleeiner Festplatte nutzt der Raspberry Pi eine Micro-SD-Karte wobei das Basisbe-triebssystem etwa 2 Gigabyte auf der Karte belegt Fuumlr vernuumlnftiges Arbeiten emp-fiehlt sich eine Karte mit mindestens vier Gigabyte oder mehr mit der Geschwindig-keitsklasse [18]

Um die Stromversorgung zu entlasten eignet sich hierfuumlr ein USB-Hub Neben denUSB-Hub werden Netzwerkkabeln benoumltigt um eine Verbindung zum Netzwerkan-schluss herzustellen Ein wichtiger Bestandteil ist der Router fuumlr die Verwendungvon mehreren Netzknoten

Raspberry Pi verfuumlgt ein angepasstes Betriebssystem Namens Raspbian Es ist ei-ne Version von der Linuxdistribution Debian Zum Installieren von Raspbian auf denRaspberry Pi wird zusaumltzlich ein weiterer Rechner benoumltigt um die IMG-Datei vomRaspbian auf die Speicherkarte zu schreiben Da der weitere Rechner unter demWindows Betriebssystem lief eignete sich dafuumlr das Programm Win32DiskManager[18] Win32DiskManager erstellt bootfaumlhige SD-Karten fuumlr den Raspberry Pi

Mithilfe von dem Windows Tool Putty hat man die Moumlglichkeit sich per Netzwerkdurch SSH mit dem entfernten Raspberry Pi zu verbinden [18]Dadurch laumlsst sichdie Eingabekonsole vom Raspbian per Windows Rechner steuern Der Zugriff aufdie Benutzeroberflaumlche vom Raspbian erfolgt durch die Remotedesktopverbindungvon Windows

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 27: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 27

Abbildung 6 zeigt die Hardwarekomponenten fuumlr diese Bachelorarbeit

Abbildung 5 Aufbau eines Clusters

32 Installation und Konfiguration

Dieser Abschnitt zeigt in der Reihenfolge die notwendigen Konfigurations- und In-stallationsschritte

321 Raspberry Pi Installation

Fuumlr die Inbetriebnahme von Raspberry Pi soll zunaumlchst ein Betriebssystem auf derSD-Karte installiert werden Die Betriebssysteme Raspbian und Noobs werdenvon Raspberry Pi Foundation als optimal gesehen und empfohlen [19] Fuumlr dieseBachelorarbeit kommt derzeit die aktuellste Version Raspbian Jessy zum EinsatzDer Start des Betriebssystems gelingt uumlber die SD-Karte Um es moumlglich zu ma-chen muss zunaumlchst die Imagedatei vom Raspbian auf die SD-Karte geschriebenwerden [18]

Nach dem Extrahieren kann nun das Programm starten Die folgende Abbildungzeigt die Benutzeroberflaumlche von Win32 Disk Manager Um die Imagedatei auf dieSD-Karte zuschreiben muss zunaumlchst der Pfad dieser Datei ausgewaumlhlt werden(siehe Abbildung 6)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 28: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 28

Abbildung 6 Win32 Disk Manager

322 Raspberry Pi Konfiguration

Nachdem die Raspis angeschlossen sind und der Zugriff uumlber PuTTY erfolgte tauchtbeim ersten Booten das Konfigurationstool raspi-config auf Durch das folgendeKommando laumlsst sich das Tool auch manuell aufrufensudo raspi-config

Abbildung 7 Menuuml des Konfigurations-Tool raspi-config

Abbildung 7 zeigt das Menuuml von raspi-config und deren Konfigurationsoptionen ImFolgenden werden die wichtigsten Konfigurationsoptionen naumlher vorgestellt

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 29: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 29

Expand FilesystemDiese Option ermoumlglicht es das Volumen der SD-Karte fuumlr Raspbian zu parti-tionieren fuumlr Raspbian Die Standardsetzung gibt zwei GigaByte vor [20]

SSHDiese Option ist besonders wichtig fuumlr die Fernsteuerung uumlber das NetzwerkDie Aktivierung ist standardmaumlszligig und soll auch weiterhin bestehen bleiben[20]

Memory SplitDiese Option legt den Speicheranteil von CPU und GPU fest [20]

OverclockDiese Option bestimmt die Geschwindigkeit des Prozessors [20]

Change LocaleMit dieser Option laumlsst sich die Sprache und Zeichencodierung anpassen[20]

Nach der Anpassung dieser Konfigurationsoptionen soll ein Neustart erfolgen ummit den neuen Einstellungen zu starten [20] Dies passiert mit dem folgenden Kom-mando

sudo shutdown -r 0Nach dem Neustart erfolgt die Aktualisierung von den bereits vorhandenen Pro-grammen um den Raspberry Pi auf den aktuellen Stand zu bringensudo apt-get updatesudo apt-get upgrade

Die Vergabe der IP-Adressen erfolgt automatisch durch den DHCP-Server vom Rou-ter Um die IP-Adresse von den jeweiligen Geraumlten herauszufinden kam das Pro-gramm Fing zum Einsatz Wie auf der nachfolgenden Abbildung zu erkennen sinddie IP-Adresse 19216816 19216817 19216818 reserviert fuumlr die Ras-pis Um sich eine bessere Uumlbersicht zu verschaffen erfolgt die Umbenennung derHostnamen wie folgt p101 p201 und p301 Diese Aumlnderung erfolgt uumlber die Dateietchostname

sudo vi etchostname

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 30: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 30

Abbildung 8 Programm Fing

Anstatt immer feste IP-Adresse zu verwenden erfolgt eine automatische IPv4-Konfigurationper DHCP-Client Deamon (DHCPCD) Standardmaumlszligig ist der DHCP Client Dea-mon bei Raspbian Jessie aktiviert Die Konfiguration erfolge uumlber die Datei etcdh-cpdconf [21]

Abbildung 9 Datei etcdhcpdconf

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 31: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 31

Fuumlr die PuTTY-Konfiguration ist es zunaumlchst notwendig die IP-Adresse oder denHostnamen einzugeben und das SSH-Protokoll zu aktivieren Benutzername piund Passwort raspberry sind beim Betriebssystem Raspbian bereits standardmauml-szligig vorgegeben PuTTY benutzt die Portnummer 22 standardmaumlszligig

Abbildung 10 PuTTY

Da die Rasberry Pis von einem Windowsrechner gesteuert werden erfolgt der Zu-griff auf die grafische Oberflaumlche mit der Remotedesktopverbindung Remotedesktop-verbindung ist im Lieferumfang von Microsoft enthalten Nun folgt die Installationdes Remote Desktop Servers XRDP ist eine freie Implementierung des RemoteDesktop Protokolls Diese koumlnnen direkt mittels den Paketmanager APT installiertwerden [22] Nach Abschluss der Installation wird der XRDP-Daemon automatischgestartetsudo apt-get install xrdp

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 32: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 32

Um eine Verbindung zu einen Remotedesktop herzustellen kommt zunaumlchst dieEingabe der IP-Adresse (siehe Abbildung 11)

Abbildung 11 Anmeldung per Remotedesktopverbindung

Nach der Hostname- und Passworteingabe erscheint die grafische Oberflaumlche vonRaspbian (Abbildung 12)

Abbildung 12 Grafische Oberflaumlche von Raspbian

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 33: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 33

323 MongoDB Installation

Als Erstes werden die Programme von MongoDB Version 309 heruntergeladen Eshandelt sich um eine 32-bit-Variante Dies bedeutet dass zwei Gigabyte zur Verfuuml-gung stehen Die Installation erfolgt durch das Herunterladen einer gz-Datei in demdie ausfuumlhrbaren Dateien enthalten sind Nach dem Extrahieren bedarf es keineweitere Installationwget httpswwwandyfelongcomdownloadscore_mongodbtargztar zxvf core_mongodbtargz

Folgende Programme sind enthalten

bull mongoDie Mongoshell ist eine Kommandozeile die direkt Befehle an MongoDB sen-det [23]

bull mongodDer Mongo Deamon ist ein Serverprozess und laumluft auf einem bestimmtenPort und nimmt Anfragen entgegen [24]

bull mongoperfRepraumlsentiert die Festplatten-Leistung [25]

bull mongosMongos auch Sharding-Server genannt ist ein Router Mongos verarbeitet dieAbfragen und leitet diese an den Mongod-Server [26]

Weiterhin werden die Werkzeuge von MongoDB Version 309 heruntergeladenAuch hier erfolgt die Installation und das Extrahieren einer gz-Dateiwget httpswwwandyfelongcomdownloadstools_mongodbtargz tar zxvf co-re_mongodbtargz

Folgende Werkzeuge fuumlr MongoDB sind mit der jeweils dazugehoumlrigen Funktions-beschreibung enthalten

bull mongoexportExportiert Daten von einer MongoDB Instanz in einem JSON-Format [27]

bull mongoimportImportiert Daten in einer MongoDB Instanz in einem JSON-Format

bull mongorestoreErstellt einen Back-up in einer neuen MongoDB Instanz [28]

bull mongotopAusgabe der Ausfuumlhrungszeiten von Lese- und Schreiboperationen von Col-lections [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 34: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 34

bull mongodumpErstellt Sicherungskopie von Daten [29]

bull mongofilesSpeichert und manipuliert die Daten von GridFS-Objekten [30]

bull mongooplogSpeichert alle schreibenden Operationen in einem Ringpuffer mit fester GroumlszligeDient als Grundlage fuumlr die Replikation [31]

bull mongostatPeriodische Ausgabe von Lese- und Schreibinformationen auf einer Daten-bank und Collections [6]

Mit den folgenden Befehlen wird in das Verzeichnis von den Werkzeugen fuumlr Mon-goDB gewechselt Benutzer werden zugewiesen und erhalten die fuumlr sie vorgesehe-ne Berechtigungcd homesudo chown rootroot mongosudo chmod 755 mongosudo strip mongosudo cp -p mongo usrbin

Hier wird ein Datenbankverzeichnis mit dem entsprechenden Benutzer und Berech-tigungen erstellt [32]sudo mkdir varlibmongodbsudo chown mongodbroot varlibmongodbsudo chmod 775 varlibmongodb

Hier wird ein Protokollverzeichnis mit dem entsprechenden Besitzer erstellt [32]sudo mkdir var log mongodbsudo chown mongodbnogroup varlogmongodb

324 MongoDB Konfiguration

Die Konfigurationsdateien von MongoDB verwenden zur Serialisierung die verein-fachte Auszeichnungssprache YAML Die Erstellung von Konfigurationsdateien er-leichtert die Verwendung von mongod und mongos Instanzen Folgende Konfigura-tionsoptionen wurden verwendet

bull portStandardmaumlszligig benutzt MongoDB den Port 27017 Es besteht auch die Moumlg-lichkeit einen anderen freien Port zu benutzen [33]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 35: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 35

bull shardsvrDiese Kategorie wird fuumlr diese Arbeit eingesetzt und wird im Folgenden nochausfuumlhrlicher erlaumlutert [33]

bull replsetDurch die Option replset wird der Replikationsname festgelegt [33]

bull quietFuumlhrt die mongod Instanz in einem ruhigen Modus und beendet die Aktivitaumlten[33]

bull dbpathBestimmung des Speicherortes fuumlr die Daten [33]

bull logpathMongoDB erstellt eine Protokolldatei in dem angegebenen Pfad Hier werdenalle Diagnoseprotokollinformationen gesammelt [33]

bull logappendBei einem Neustart der mongod Instanz werden neue Eintraumlge am Ende dervorhandenen Protokolldatei hinzugefuumlgt Ohne diese Option benutzt die mon-god Instanz die vorhandene Protokolldatei und erstellt eine neue Datei [33]

bull storageEngineDer Systemdienst MMAPV1 uumlbernimmt die Rolle fuumlr die Speicherengine Eswird somit bestimmt wie die Daten auf den Speicher und Festplatte geschrie-ben werden [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 36: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 36

Der letzter Schritt ist die Erstellung einer MongoDB-Dienstdatei Dabei kann derDienst manuell bedient werden um folgende Befehle auszufuumlhren Starten neu-starten Status abfragen und beenden Folgende Abbildung zeigt die MongoDB-Dienstdatei

Abbildung 13 MongoDB-Dienstdatei

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 37: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 37

4 MongoDB

In diesem Kapitel werden die Grundlagen von Replication und Sharding naumlher vor-gestellt Anschlieszligend erfolgt die Implementierung einer Replication- und Sharding-Umgebung in einem Cluster mit Raspis

41 Grundlagen

In der Datei mongodbconf befinden sich folgende Konfigurationseinstellungen

dbpath varlibmongodblogappend true

storageEngine mmapv1quiet truerest truehttp true

Tabelle 6 Konfigurationsdatei mongodbconf

411 MongoDB-Dienst Starten

Um MongoDB zu bedienen muss zunaumlchst die Mongod-Instanz aktiviert werdenDies passiert mit dem folgenden Befehlsudo mongodb start

Anschlieszligend kann nun eine Verbindung mit Kommandozeilenprogramm Mongos-hell hergestellt werden Die Verbindung mit MongoDB-Server entsteht uumlber die Pro-tokolle TCP und IP Mongo Shell wird mit dem folgenden Befehl aufgerufenmongo

Folgender Befehl steht fuumlr den Neustart der Mongod-Instanzsudo mongodb restart

Folgender Befehl steht fuumlr das Beenden der Mongod-Instanzsudo mongodb stop

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 38: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 38

42 Replikation

Die Ausfallsicherheit von den Daten wird durch die Replikation gesteigert Dabei sinddie replizierten Daten anhand von mehreren Knoten verteilt und somit zur weiterenVerwendung verfuumlgbar MongoDB unterscheidet zwischen zwei Arten von Replika-tion Master-Slave-Replikation und Replica Sets [6]

421 Oplog

Fuumlr die Aktivierung dieser Replikation dient das Oplog (Abkuumlrzung fuumlr OperationsLog) In einem Oplog befinden sich alle schreibenden Operationen wie die Befeh-le insert update und delete Das Feld op zeigt welcher Operationstyp (i=insertu=update d=delete) enthalten ist Das Feld ns uumlbergibt die betreffende Collection[6]

422 Master-Slave-Replikation

Bei einer Master-Slave-Replikation haben die Instanzen eine feste Rolle Eine In-stanz uumlbernimmt die Rolle des Masterknotens und somit haben weitere Instanzendie Rolle des Sekundaumlrknotens Der Masterknoten repliziert die Schreiboperationenan die Slaveknoten [6]

423 Replica Sets

Bei Replica Sets gibt es zwei Arten von Knoten Primaumlrknoten und Sekundaumlrkno-ten Primaumlrknoten besitzen sowohl Lese- als auch Schreibrechte Diese erstelleneine Kopie von den Daten auf die Sekundaumlrknoten Der Sekundaumlrknoten verfuumlgtuumlber keine Lese- und Schreibrechte Beim Ausfall eines Primaumlrknoten wird ein Se-kundaumlrknoten zum neuem Primaumlrknoten gewaumlhlt Im Gegensatz zur Master-Slave-Replikation sind hier bei einzelnen Instanzen keine Feste Rollen vorgegeben [6]

Abbildung 14

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 39: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 39

424 Replication uumlber ein Raspberry Pi-Cluster

Fuumlr den Aufbau der Replication kamen drei folgende Server zum Einsatz

p101 ServerIP-Adresse 19216816Port 27017Rolle Primaumlrserver

p201 ServerIP-Adresse 19216817Port 27017Rolle Sekundaumlrserver

p301 ServerIP-Adresse 19216818Port 27017Rolle Sekundaumlrserver

Tabelle 7 Replication-Umgebung

Als Erstes wird die Konfigurationsdatei mongodbconf mit der Option ndashreplset rs0erweitert Das gilt auch fuumlr die Server p201 und p301 da diese Server auch zumReplica Set hinzugefuumlgt werden Folgender Befehl initialisiert den Server p101 zumPrimaumlrserverrsinitiate()

Im naumlchsten Schritt erfolgt die Erweiterung mit zwei weiteren Teilnehmern fuumlr dasReplica Setrsadd(1921681727017)rsadd(1921681827017)

Der Primaumlrserver p101 fuumlhrt schreibende Operationen innerhalb einer Replica Setund repliziert sie an die Sekundaumlrservern p201 und p301 (siehe Abbildung 15)

Abbildung 15 Replica Set

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 40: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 40

Beim Ausfall des Primaumlrservers p101 uumlbernimmt einer der verbleibenden Sekundaumlr-servern die Rolle des Primaumlrservers (siehe Abbildung 16)

Abbildung 16 Ausfall des Primaumlrservers p101

Bei der Wiederaktivierung des Servers p101 uumlbernimmt dieser Server diesmal dieRolle des Sekundaumlrservers (siehe Abbildung 17)

Abbildung 17 Wiederaktiverung des Servers p101

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 41: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 41

Das Kommando rsstatus() zeigt den aktuellen Status des Replica Sets (siehe Ab-bildung 18)

Abbildung 18 Status des Replica Sets

Uumlber das HTTP-Interface unter httplocalhost28017_replSet besteht die Moumlglich-keit den Zustand des Replica Sets einzusehen [6]

Abbildung 19 Status des Replica Set uumlber HTTP-Interface

Es besteht die Moumlglichkeit das Verhalten von Replica Set zu beeinflussen DasKommando rsconf() zeigt neben Host und ID noch folgende Eigenschaften (sieheAbbildung 20)

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 42: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 42

Abbildung 20 JavaScript-Befehl rsconf()

arbiteronly Ein Arbiter gibt seine Stimme im Falle einer Neuwahl des Primaumlrkno-tens Hier ist boolean auf 0 gesetzt und somit nicht aktiv [6]

votes Bestimmt ob es ein Stimmrecht fuumlr den Knoten gibt Die Bestimmung erfolgtdurch die Werte 0 und 1 Der Defaultwert ist 1 [6]

slaveDelay Zeigt einen Integerwert der die Verzoumlgerung in Sekunden an einemSekundaumlrserver anzeigt [6]

hidden Zeigt einen Booleanwert an ob ein Knoten versteckt ist [6]

tags Durch das Einsetzen von Tag lassen sich eigene Read Preferences und WriteConcers definieren [6]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 43: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 43

buildIndexes Der boolean Defaultwert schaltet die Indexerzeugung aus Diese Ope-ration ist nur sinnvoll bei Back-up-Zwecken da keine Leseoperationen dafuumlr notwen-dig sind [6]

Innerhalb dieses Replica Sets sind die Rollen nicht zugeordnet Im Folgenden er-halten die Server einen Prioritaumltswert damit der Server p101 bei einer erneutenNeuwahl wieder die Rolle als Primaumlrserver uumlbernimmt

Abbildung 21 Prioritaumltenvergabe

Je houmlher der Prioritaumltswert desto houmlher ist die Wahrscheinlichkeit den Primaumlrserverzu uumlbernehmen Ein Wert von 0 verwehrt die Vergabe des Primaumlrservers vollstaumlndigDer Server p101 erhaumllt somit den houmlchsten Wert und im Falle einer Wiederherstel-lung uumlbernimmt dieser Server wieder den Primaumlrserver [6]

Lesezugriff vom Sekundaumlrserver Wie schon bereits erwaumlhnt verfuumlgt nur der Pri-maumlrserver die Schreibzugriffe Jedoch kann ein Defaultwert den Schreibzugriff ver-hindern und es nur auf die Lesezugriffe beschraumlnken Der Zugriff auf die Leseope-rationen von Sekundaumlrserver erfolgt uumlber das Kommando rsslaveOk() Dieses Sze-nario kommt nur bei Anwendungen infrage bei denen Strong Consistency nicht er-forderlich ist Dabei handelt sich hier um Eventual Consistency es deutet auf dieEigenschaft eines verteilten Systems hin Dies bedeutet dass alle Mitglieder desReplica Sets schlieszliglich am Ende den gleichen Datenbestand haben aber auch ei-ne inkonsistente Zeitspanne zulassen [6] Folgendes Beispiel zeigt den Lesezugriffvon einem Sekundaumlrserver

Abbildung 22 Lesezugriff durch Sekundaumlrserver

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 44: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 44

43 Vertikale und Horizontale Skalierung

Abbildung 23 Vertikale und Horizontale Skalierung

431 Vertikale Sklalierung

Die vertikale Skalierung auch Scale-up genannt definiert das Aufruumlsten von einemexistierenden Server durch bessere Hardwarekomponenten wie zum Beispiel mitmehr CPU Hauptspeicher und Netzwerkschnittstellen Ein wesentlicher Faktor istdass die Kosten fuumlr besseren Hardwarekomponenten nicht gleichmaumlszligig verlaufenund somit auch ein exponentielles Wachstum der Kosten moumlglich ist Der Nachteil istdabei wenn wenig Server vorhanden sind auch die Ausfallsicherheit sich dadurchbeschraumlnkt [34]

432 Horizontale Sklalierung

Die horizontale Skalierung auch Scale-out genannt bedeutet das es eine Anzahlvon verfuumlgbaren Servern gibt die in einer verteilten Datenbanksystem miteinanderverbunden sind Es kann sich dabei um eine sehr hohe Anzahl von Servern handelnMehrere tausend Server sind in der heutigen Zeit kein Ausnahmefall Die Leistungdes einzelnen Servers muss nicht zwingend gleichmaumlszligig sein Der wesentliche Vor-teil bei horizontaler Skalierung liegt in der Verfuumlgbarkeit und der Ausfalltoleranz DieRedundanz kompensiert den Ausfall eines einzelnen Serverknotens oder den Ab-bruch einer Verbindung zwischen zwei Serverknoten [34]

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 45: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 45

44 Sharding

Sharding ist eine Methode bei MongoDB um Datenbankpartitionierung durchzufuumlh-ren Dadurch lassen sich groszlige Datenmengen in einzelne Knoten verteilen [35] DieDaten sollen sich anhand von logischen Kriterien verteilen lassen und sollten moumlg-lichst in gleicher Datenmenge in den einzelnen Shards vorhanden sein Bei einemShard handelt es sich um einen einzelnen Datenbankserver der eine Teilmenge vonDaten beinhaltet Dabei nennt sich die Teilmenge von Daten Chunk Somit wird derWertebereich von den Chunks durch eine obere und untere Grenze eingeschraumlnktEs ist zu beachten dass die maximale Chunk-Groumlszlige 64 Megabyte betraumlgt [36] DieAufteilung von mehrere Daten wird von den sogenannten Sharding-Keys bestimmtDie Reihenfolge der Dokumenten bleibt erhalten Ein Beispiel hierfuumlr ist die Partitio-nierung eines Telefonbuches Der Nachname koumlnnte als Sharding-Key dienen Beidrei verfuumlgbaren Shards kann der erste Shard alle Nachnamen von A-H der zweitealle Nachnamen von I-P und der dritte die restlichen Nachnamen von Q-Z enthalten[35]

441 Sharding uumlber ein Raspberry Pi-Cluster

Fuumlr die Erstellung einer Sharding-Umgebung ist die Reihenfolge relevant Um dieverfuumlgbaren Daten zuzuteilen bzw zu gliedern sind folgende Schritte notwendig [6]

bull Bekanntgabe der Sharding-Knoten

bull Aktivierung einer Datenbank fuumlr die Sharding-Umgebung

bull Definition des Shard Keys auf der Collection

Es handelt sich um eine minimale Sharding-Umgebung mit einem Konfigurations-server einem Routerprozess und zwei Shard-Servern die uumlber einen separatenmongod-Prozess laufen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 46: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 46

Folgende Tabelle zeigt die Konfigurationsrollen fuumlr die Sharding-Umgebung

p101 ServerIP-Adresse 19216816Port 27017Rolle mongos-Router

p101 ServerIP-Adresse 19216816Port 29017Rolle Konfigurationsserver

p201 ServerIP-Adresse 19216817Port 28017Rolle Shard-Server

p301 ServerIP-Adresse 19216818Port 28017Rolle Shard-Server

Tabelle 8 Sharding-Umgebung

Zunaumlchst erfolgt der Start mit einem Konfigurationsserver Dieser Prozess laumluft aufder IP-Adresse 19216816 und dem Port 29017 Die Voraussetzung ist ein neu zuerstellender Ordner fuumlr die vorgesehene Speicherung von Metainformationen uumlberdie Shards und der Verwaltungsinformationen von Chunks [6] Somit kann der Kon-figurationsserver startenmkdir -p datashconfigsudo mongod ndashdbpath datashconfig ndashport 29017 ndashconfigsvr

Durch die Bekanntgabe des Konfigurationsservers kann der Routerprozess (Mon-gos) startensudo mongos ndashconfigdb 1921681629017 ndashchunkSize 16

Der Parameter chunkSize bestimmt die Groumlszlige eines Chunks und enthaumllt einen klei-nen Wert von 16 Megabyte Im naumlchsten Schritt erfolgt die Konfiguration der zweiShards Hierfuumlr wurden die Server p201 und p301 verwendet mit dem jeweiligenPort 28017 Fuumlr die Verwaltung der Shards muss man sich mit dem Router uumlber denMongoshell verbindenmongo ndashport 27017

Das JavaScript-Objekt sh gibt die Moumlglichkeit das Sharding zu verwalten Der Be-fehl shstatus() zeigt den aktuellen Status der Sharding-Umgebung Anhand des Fel-des partitioned kann man ablesen dass fuumlr die aktuelle Sharding-Umgebung nochkeine Datenbank aktiviert ist

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 47: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 47

Das Feld shards zeigt alle Server die sich in der Sharding-Umgebung befinden [6]Im naumlchsten Schritt erfolgt die Erweiterung der Sharding-Umgebung mit den Ser-vern p201 und p301 (siehe Abbildung 24 und 25)

Abbildung 24 Erstellung einer Sharding-Umgebung

Abbildung 25 Skalierung-Umgebung

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 48: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 48

Um eine Sharding auf einer Datenbank durchzufuumlhren benoumltigt man eine aktiveDatenbank Hierfuumlr wird die Datenbank Twitter verwendet und auf de Server p201und den Port 28017 importiert Die Datenbank Twitter ist unter der Webseitehttpsgithubcomttrellemongodb-buchblobmasterdatatweetszip fuumlr dieInstallation verfuumlgbar Diese Datenbank verfuumlgt 51428 Dokumente Nach dem Ex-trahieren der zip-Datei wird die BSON-Datei auf den Server p201 importiert DieCollections werden mit dem Namen tweets importiertmongorestore -port 28017 -d twitter -c tweets homepitweetsbson

Somit ist der Shard shard000 von Server p201 der primaumlre Shard Folgender Befehlaktiviert die Datenbank twitter fuumlr die Sharding-UmgebungshenableSharding(twitter)

Da die Collection aus bestehenden Daten verfuumlgbar ist muss noch fuumlr den Shardein Index vorhanden seindbtweetsensureIndex(userscreen_name 1)shshardCollection(twittertweets userscreen_name)

Abbildung 26 Aufteilung der Shards

Es sind vier Chunks vorhanden die gleichmaumlszligig auf die Shards shard000 undshard0001 verteilt sind Ebenfalls sieht man fuumlr jeden einzelnen Chunk den zuge-teilten Wertebereich

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 49: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 49

5 Untersuchung der Aggregationsmethoden

Der folgende Abschnitt befasst sich hauptsaumlchlich mit der Untersuchung von Aggre-gationsmethoden

51 Grafische Benutzeroberflaumlche fuumlr MongoDB

Es gibt eine Reihe von Programmen die eine grafische Benutzeroberflaumlche fuumlrdie Administration von MongoDB anbieten Fuumlr diese Bachelorarbeit kam das Pro-gramm Robomongo zum Einsatz (siehe Abbildung 27) Die Verbindung auf eineMongoDB-Instanz erfolgte uumlber das SSH-Protokoll wie beim Programm PuTTY

Abbildung 27 Robomongo

52 Aggregation von Daten

Bei einer komplexen Abfragemethode kommen Aggregationsmethoden zum Ein-satz als zum Beispiel fuumlr Berechnungen von Summen Durchschnitt Maximum undMinimum Das Ergebnis kommt in der gewuumlnschten definierten Ausgabe [6]MongoDB bietet drei Moumlglichkeiten [6] fuumlr die Aggregation von Daten

bull Einfache Abfragemethoden zur Datenaggregation

bull Aggregation Pipline

bull MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 50: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 50

521 Einfache Abfragemethoden zur Datenaggregation

count() Die Aggregationsmethode count() ermittelt die Anzahl der gefundenenDokumenten [6] Das folgende Beispiel liefert als Ergebnis eine Anzahl von Benut-zer die mehr als 100 Follower haben [6]

Abbildung 28figcount

distinct() Die Aggregationsmethode distinct() reduziert die Abfrage und zeigt nureinen Wert auch wenn sie mehrfach vorkommen Dieselbe Funktion existiert auchbei SQL Der Zugriff kann nur auf die Werte und nicht auf Schluumlssel zugreifen [6]Abbildung 27 zeigt eine Abfrage alle verfuumlgbaren Sprachen der Benutzer durch dis-tinct()

Abbildung 29 Aggregationsmethode distinct()

group() Durch die Aggregationsmethode group() lassen sich Daten anhand einesSchluumlssels gruppieren Diese Methode fuumlhrt zusaumltzlich einfache Operationen wiedas Zaumlhlen oder Summieren von Werten aus Der Zugriff erfolgt uumlber die Collectionund operiert auf der Basis von Dokumenten [6] Folgende Tabelle zeigt die vorgege-benen Parameter [6]

Parameter Bedeutungkey Schluumlsselwert fuumlr die Gruppierungreduce Eine Funktion fuumlr bestimme Operationen zB fuumlr das

Zaumlhlen oder Durchschnittsbildung Diese Funktion verfuumlgtzwei Eingangsparameter einmal das aktuelle Dokument undsowie das aggregierte Ergebnisdokument

initial Initialisiert das Ergebnis nach einer reduce Funktionkeyf (Optional) Berechnet einen neuen Schluumlssel anstatt den bereits definierten

Schluumlssel zu verwendencond (Optional) Filterung der Dokumente einer Collection Sonst sind alle

Dokumente gelistet ohne diese Optionfinalize (Optional) Zeigt das ausgefuumlhrte Ergebnisdokument fuumlr jeden Datensatz an

Tabelle 9 Parameter bei group()

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 51: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 51

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und die An-zahl der dazugehoumlrigen Tweets auf der bestehenden Replication-Umgebung (sieheKapitel 424) Diese Aggregationsmethode ist nicht kompatibel um Abfragen aufeiner Sharding-Umgebung auszufuumlhren [6]

Abbildung 30 Aggregationsmethode group()

522 Aggregation Pipeline

MongoDB bietet eine eigene komplexe Aggregationsmethode das sogenannte Ag-gregation Pipeline als Alternative fuumlr MapReduce an Hier besteht die MoumlglichkeitDaten auf mehreren Rechnern parallel zu verarbeiten Der Begriff Pipeline bedeu-tet dass eine Reihe von einzelnen Schritten durch den Anwender definiert ist [13]Folgende Tabelle zeigt Pipeline-Operationen die zur Verfuumlgung stehen [37]

Operationen Beschreibung$match Filterung von Dokumenten$project Einschraumlnkung einer Teilmenge von Feldern und somit

veraumlndern sich die Werte der Felder$sort Sortierung von Dokumenten$skip Uumlberspringt eine beliebige Anzahl von Dokumenten$limit Begrenzt eine beliebige Anzahl von Dokumenten$group Gruppierung von einem oder mehreren Feldern$unwind Anwendung bei Arrays Generierung jedes Array-Eintrags fuumlr ein

neues Dokument der naumlchsten Pipeline-Stufe$redact Filterung von Felder und Teilbaumlume des Dokuments in Abhaumlngigkeit

vom Inhalte anderer Felder$out Ergebnisanzeige der Aggregation

Auszligerdem wird auch eine Collection fuumlr diese Operation gebildet

Tabelle 10 Pipeline-Operationen

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 52: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 52

Folgende Abbildung zeigt eine Abfrage fuumlr die Gruppierung der Sprache und dieAnzahl der dazugehoumlrigen Tweets auf der bestehenden Sharding-Umgebung(sieheKapitel 441)

Abbildung 31 Aggregation Pipeline

Die Messung fuumlr die Abfrage ergab 1584 Millisekunden und zeigt das die EnglischeSprache die meistbenutzte Sprache bei Twitter ist

523 MapReduce

Die Aggregationsmethode Aggregation Pipeline ist sehr umfangreich aber es gibtauch Szenarien in denen es nicht ausreichen wuumlrde Eine weitere Funktion fuumlr dieAggregation ist das MapReduce-Verfahren Ein wesentlicher Vorteil dabei ist dassdas MapReduce-Verfahren alle Datensaumltze auch in einem verteilten Datenbanksys-tem durchsuchen [37] Folgende Abbildung zeigt eine Abfrage mit dem gleichenErgebnisziel wie in der Abbildung 31

Abbildung 32 MapReduce

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 53: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 53

Nach der Ausfuumlhrung liefert die Ausgabe mehrere Statistiken Die Berechnung zeigtdas MapReduce-Verfahren wesentlich laumlnger braucht fuumlr die Abfrage als Aggrega-tion Pipeline Die Berechnung ergab 5148 Millisekunden Zudem wurden 51428Dokumente gelesen (input) und genau so viele Schluumlssel-Wert-Paare (emit) produ-ziert Die reduce-Funktion wurde 1968 mal aufgerufen Die Funktion out erstellteine Collection-Ausgabe namens ergebnisse aus der die Ergebnisse auszulesensind Die Folgende Abbildung zeigt die Collection ergebnisse

Abbildung 33 Ergebnisanzeige der Aggregation

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 54: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 54

6 Fazit

Die Zielsetzung der vorliegenden Arbeit war der Aufbau eines NoSQL Datenbank-system-Clusters mit MongoDB auf Basis von Einplatinencomputern sowie die Un-tersuchung deren Funktionalitaumlt Wie die Bachelorarbeit gezeigt hat eignet sich derEinplatinencomputer Raspberry Pi hervorragend fuumlr das Experimentieren mit eige-nen Clustersystemen da die Anschaffungskosten minimal sind und es einen gerin-gen Stromverbrauch erzeugt Die Arbeit mit dem Einplatinencomputer Raspberry Piund dem NoSQL-Datenbanksystem MongoDB hat mir einen groszligen Spaszlig gemacht

Mit MongoDB lernte und analysierte ich die Funktionalitaumlten eines verteilten Da-tenbanksystems durch die Replikation der Daten (Replication) und ihre Skalierbar-keit (Sharding) Neue Server lassen sich einfach und schnell in einem vorhandenenCluster einbinden Der Nachteil ist dass kaum Programme fuumlr Messungen existie-ren welche die Leistung von NoSQL Datenbanken vergleichbar machen koumlnnenEiner diesen wenigen Programme ist Yahoos bdquoCloud Serving Benchmarkldquo [YCSB]Aber auch hier kann man sich nicht vollstaumlndig auf den Leistungsvergleich verlas-sen

Die Zukunft sehe ich fuumlr MongoDB optimistisch da immer mehr Groszligunterneh-men das Datenbanksystem benutzen und allgemein die Nachfrage nach NoSQL-Datenbanksystemen sich steigt Da die Anforderungen an traditionelle Datenbank-systeme nicht mehr bewaumlltigt werden koumlnnen Besonders im Bereich der Webent-wicklung eignen sich unterschiedliche Datenstrukturen

Wie sich andere NoSQL-Datenbanksysteme nach Funktionalitaumlt und Leistung un-terscheiden bedarf es an weiteren Untersuchungen Mein Interesse hat sich aufBig Data fokussiert und in diesem Zusammenhang kam ich auf die NoSQL-Datenbanksysteme

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 55: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 55

Literaturverzeichnis[1] Edgar fcodd httpsdewikipediaorgwikiEdgar_F_Codd Eingesehen

am 18072016

[2] Sql httpsdewikipediaorgwikiSQL Eingesehen am 18072016

[3] Ddl dewikipediaorgwikiData_Definition_Language Eingesehen am18072016

[4] What ist big data httpswww-01ibmcomsoftwaredatabigdatawhat-is-big-datahtml Eingesehen am 14072016

[5] Raspberry pi guide httpsraspberrypiguidede Eingesehen am30062016

[6] Tobias Trelle MongoDB - Der praktische Einstieg dpunktverlag Heidelberg1 auflage edition 2014

[7] Db-engines ranking httpsdb-enginescomderanking Eingesehen am01072016

[8] Mongodb httpwikisgmfh-koelndewiki_dbDatenbankenMongoDB Ein-gesehen am 13072016

[9] Who uses mongodb httpwwwmongodbcomwho-uses-mongodb Eingese-hen am 13072016

[10] Mongodb mit dem bdquogroumlszligten releaseldquo seiner geschichte httpjaxenterdemongodb-mit-dem-grosten-release-seiner-geschichte-1296 Eingesehenam 01072016

[11] Was ist bei big data httpwwwcomputerwochedeawas-ist-was-bei-big-data3070624 Eingesehen am 20062016

[12] Stefan Edlich Achim Friedland Jens Hampe Benjamin Brauer and MarkusBruumlckner NoSQL - Einstieg in die Welt nichtrelationaler Web 20 DatenbankenHanser Muenchen 2 aufl edition 2011

[13] Johannes Schildgen MongoDB kompakt - Was Sie uumlber die NoSQL-Dokumentendatenbank wissen muumlssen BoD ndash Books on Demand Norders-tedt 1 aufl edition 2016

[14] Base httpswikisgmfh-koelndewiki_dbDatenbankenBASE Einge-sehen am 07072016

[15] Keyvaluesysteme httpswikisgmfh-koelndewiki_dbDatenbankenKeyValueSysteme Eingesehen am 07082016

[16] Nosql httpsdewikipediaorgwikiNoSQL Eingesehen am 25062016

[17] Mongodb httppiinformatikuni-siegendeMitarbeitermrindtLehreSeminareNoSQLeinreichungenNOSQLTEC-2015_paper_13pdf Ein-gesehen am 27072016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 56: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 56

[18] Raspberry pi installation httpwwwnetzmafiadeskriptenhardwareRasPiRasPi_installhtml Eingesehen am 22062016

[19] Raspberry pi downloads httpwwwraspberrypiorgdownloads Einge-sehen am 22062016

[20] Matt Richardson and Shawn Wallace Raspberry Pi fuumlr Einsteiger OrsquoReillyGermany Koeln 2 aufl edition 2015

[21] Statischefeste ipv4-adresse fuumlr raspbian jessie httpswwwelektronik-kompendiumdesitesraspberry-pi1912151htm Eingesehen am20072016

[22] Raspberry pi - remote desktop (xrdp) installieren wwwdatenreiswderaspberry-pi-remote-desktop-xrdp-installieren Eingesehen am11072016

[23] Mongo httpsdocsmongodbcommanualreferenceprogrammongo Ein-gesehen am 23072016

[24] Mongod httpsdocsmongodbcommanualreferenceprogrammongodEingesehen am 23072016

[25] Mongoperf httpsdocsmongodbcommanualreferenceprogrammongoperf Eingesehen am 23072016

[26] Mongos httpsdocsmongodbcommanualreferenceprogrammongosEingesehen am 23072016

[27] Mongoexport httpwwwmongodbcomwho-uses-mongodb Eingesehen am01072016

[28] Mongorestore httpsdocsmongodbcommanualreferenceprogrammongorestore Eingesehen am 24072016

[29] Mongodump httpsdocsmongodbcommanualreferenceprogrammongodump Eingesehen am 24072016

[30] mongofiles httpdocsmongodbcommanualreferenceprogrammongofiles Eingesehen am 13072016

[31] Mongooplog httpsdocsmongodbcommanualreferenceprogramreplica-set-oplog Eingesehen am 24072016

[32] Mongodb 309 binaries for raspberry pi 2 jessie httpsandyfelong201601mongodb-3-0-9-binaries-for-raspberry-pi-2-jessie Eingesehen am26062016

[33] Configuration options httpsdocsmongodbcommanualreferenceconfiguration-options Eingesehen am 25062016

[34] Skalierbarkeit httpwikisgmfh-koelndewiki_dbDatenbankenSkalierbarkeit Eingesehen am 06082016

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit
Page 57: Bachelorarbeit · zeit ist die NoSQL-Datenbank MongoDB am beliebtesten und bei allen Datenban-ken auf dem vierten Platz [7]. Aus diesem Grund fiel die Entscheidung auf NoSQL-Datenbank

Aufbau eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis vonEinplatinencomputern 57

[35] Sharding httpdb-enginescomdearticleSharding Eingesehen am12072016

[36] Rahm Rahm Saake Saake and Sattler Sattler Verteiltes und Paralleles Daten-management - Von verteilten Datenbanken zu Big Data und Cloud Springer-Verlag Berlin Heidelberg New York 1 aufl edition 2015

[37] Mongodb fuer softwareentwickler httpwwwinformatik-aktuelldebetriebdatenbankenmongodb-fuer-software-entwicklerhtml Eingese-hen am 07082016

  • Eidesstattliche Erklaumlrung
  • Abbildungsverzeichnis
  • Tabellenverzeichnis
  • Abkuumlrzungsverzeichnis
  • 1 Einleitung
    • 11 Aufbau
      • 2 Technische Grundlagen
        • 21 NoSQL-Definition
        • 22 CAP-Theorem
        • 23 BASE
        • 24 NoSQL-Datenbanken-Vergleich
        • 25 MongoDB-Struktur
          • 251 BSON
          • 252 ObjectID und Primaumlrschluumlssel
          • 253 Datentypen
          • 254 Collection
          • 255 CRUD
            • 26 Raspberry Pi
              • 261 Raspberry Pi 3 Modell B
                  • 3 Aufbau und Installation eines Clusters mit der NoSQL-Datenbank MongoDB auf Basis von Raspberry Pi Einplatinencomputern
                    • 31 Hardware- und Softwarekomponenten
                    • 32 Installation und Konfiguration
                      • 321 Raspberry Pi Installation
                      • 322 Raspberry Pi Konfiguration
                      • 323 MongoDB Installation
                      • 324 MongoDB Konfiguration
                          • 4 MongoDB
                            • 41 Grundlagen
                              • 411 MongoDB-Dienst Starten
                                • 42 Replikation
                                  • 421 Oplog
                                  • 422 Master-Slave-Replikation
                                  • 423 Replica Sets
                                  • 424 Replication uumlber ein Raspberry Pi-Cluster
                                    • 43 Vertikale und Horizontale Skalierung
                                      • 431 Vertikale Sklalierung
                                      • 432 Horizontale Sklalierung
                                        • 44 Sharding
                                          • 441 Sharding uumlber ein Raspberry Pi-Cluster
                                              • 5 Untersuchung der Aggregationsmethoden
                                                • 51 Grafische Benutzeroberflaumlche fuumlr MongoDB
                                                • 52 Aggregation von Daten
                                                  • 521 Einfache Abfragemethoden zur Datenaggregation
                                                  • 522 Aggregation Pipeline
                                                  • 523 MapReduce
                                                      • 6 Fazit