SlideShare ist ein Scribd-Unternehmen logo
MongoDB Europe 2016MongoDB Europe 2016
Old Billingsgate, LondonOld Billingsgate, London
15. November15. November
Mit meinem CodeMit meinem Code benjaminlorenzbenjaminlorenz2020 sindsind
Ihre Tickets 20 % günstiger!Ihre Tickets 20 % günstiger!
mongodb.com/europemongodb.com/europe
Back to Basics 2016 : Webinar 4
Indizierung für Fortgeschrittene:
Text- und Geoindizes
Benjamin Lorenz
Senior Solutions Architect, MongoDB Frankfurt
@benjaminlorenz
V1.1
3
Rückblick
• Webinar 1: Einführung in NoSQL
– Verschiedene Typen von NoSQL-Datenbanken
– MongoDB ist eine Dokumentendatenbank.
• Webinar 2: Ihre erste MongoDB-Anwendung
– Erstellen von Datenbanken und Collections
– Erstellen, Lesen, Ändern und Löschen von Daten
– Indizes und explain()
• Webinar 3: Schema-Design
– Dynamische Schemata
– Einbettung von Dokumenten
– Beispiele
4
Indizierung
• Eine effiziente Methode, Daten über ihren Wert zu finden
• Vermeidet das Durchsuchen ganzer Tabellen
1 2 3 4 5 6 7
5
Herkömmliche Datenbanken nutzen B-Bäume
• MongoDB auch!
6
Komplexität O(log (n)) für select, insert & delete
7
Erstellen eines einfachen Index
db.coll.createIndex( { fieldName : <Direction> } )
Name der Datenbank
Name der Collection
Befehl
Name des zu
indizierenden Feldes
aufsteigend: 1
absteigend: -1
8
Zwei Arten von Indizes
• Volltextindex
– ermöglicht das Durchsuchen des in einem Feld enthaltenen Texts
(Lucene, Solr und Elasticsearch)
• Geoindex
– ermöglicht die Suche nach Standort (z. B. Leute in meiner Nähe)
• Diese Indizes nutzen keine B-Bäume.
9
Volltextindizes
• Ein „invertierter Index“ für alle Wörter in einem Feld (nur ein Textindex je Collection)
{ “comment” : “Ich finde Ihren Blogbeitrag sehr interessant
und nützlich. Ich hoffe, dass Sie mehr solche
Beiträge veröffentlichen.” }
>> db.posts.createIndex( { “comments” : “text” } )
MongoDB Enterprise > db.posts.find( { $text: { $search :
“beitrag" }} )
{ "_id" : ObjectId(“…"), "comment" : “Ich finde Ihren Blogbeitrag sehr
interessant und nützlich. Ich hoffe, dass Sie mehr solche Beiträge
veröffentlichen.” }
MongoDB Enterprise >
10
Ergebnisse
MongoDB Enterprise > db.posts.getIndexes()
...
{
"v" : 1,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "comment_text",
"ns" : "test.posts",
"weights" : {
"comment" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 3
}
11
Löschen von Textindizes
• Zum Löschen eines Index wird der Indexname benötigt.
db.posts.getIndexes()
{
"v" : 1,
"key" : {
"_fts" : "text",
"_ftsx" : 1
},
"name" : "comment_text",
"ns" : "test.posts",
"weights" : {
"comment" : 1
},
"default_language" : "english",
"language_override" : "language",
"textIndexVersion" : 3
}
12
Also
MongoDB Enterprise > db.posts.dropIndex( "comment_text" )
{ "nIndexesWas" : 2, "ok" : 1 }
MongoDB Enterprise >
•Sie können Indizes Namen geben:
MongoDB Enterprise > db.posts.createIndex( { "comments" : "text“ },
{ "name" : "text_index" } )
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
13
Auf dem Server
I INDEX [conn275] build index on: test.posts properties: { v: 1, key:
{ _fts: "text", _ftsx: 1 }, name: "comment_text", ns: "test.posts",
weights: { comment: 1 }, default_language: "english",
language_override: "language", textIndexVersion: 3 }}
I INDEX [conn275] building index using bulk method
I INDEX [conn275] build index done. scanned 3 total records. 0 secs
14
Ein ausführlicheres Beispiel
>> db.posts.insert( { "comment" : "Rot gelb orange gruen" } )
>> db.posts.insert( { "comment" : "Pink lila blau" } )
>> db.posts.insert( { "comment" : "Rot Pink" } )
>> db.posts.find( { "$text" : { "$search" : "Rot" }} )
{ "_id" : ObjectId(“…”), "comment" : "Rot gelb orange gruen" } )
{ "_id" : ObjectId( »…"), "comment" : "Rot Pink" } )
>> db.posts.find( { "$text" : { "$search" : "Rot Gruen" }} )
{ "_id" : ObjectId(« …"), "comment" : "Rot Pink" } )
{ "_id" : ObjectId(« …"), "comment" : "Rot gelb orange gruen" } )
>> db.posts.find( { "$text" : { "$search" : "rot" }} ) # <- Case Insensitve
{ "_id" : ObjectId(“…"), "comment" : "Rot gelb orange gruen" } )
{ "_id" : ObjectId(«…”), "comment" : "Rot Pink" } )
>>
15
Gewichtung
• Wir können verschiedenen Feldern in einem Textindex verschiedene
Gewichtungen zuweisen.
• Wenn ich z. B. primär nach Tags und weniger nach Kommentaren suche,
weise ich dem Tag-Feld eine höhere Gewichtung zu.
>> db.blog.createIndex( { comment: "text",
tags : "text” },
{ weights: { comment: 5,
tags : 10 }} )
• Jetzt werden Tags bei Suchvorgängen bevorzugt behandelt.
16
$textscore
• Die Gewichtung wirkt sich auf $textscore aus:
>> db.posts.find( { "$text" : { "$search" : "Rot" }}, { score:
{ $meta: "textScore" }} ).sort( { score: { $meta: "textScore" } } )
{ "_id" : …, "comment" : "hallo", "tags" : "Rot gruen orange", "score"
: 6.666666666666666 }
{ "_id" : …, "comment" : "Rot Pink", "score“ : 3.75 }
{ "_id" : …, "comment" : "Rot gelb orange gruen", "score“ : 3.125 }
>>
17
Weitere Parameter
• Berücksichtigen der Groß- und Kleinschreibung bei der Suche:
– $caseSensitive : true (default false)
• Berücksichtigen von Umlauten und Buchstaben mit Akzenten:
– $diacriticSensitive : True (default false)
Geoindizes
19
Geoindizes
• MongoDB unterstützt Indizes, die auf zweidimensionalen sphärischen
Koordinaten basieren (sphärische 2D-Indizes).
• Damit können Punkte auf der Erde abgebildet werden.
• Die Koordinaten werden im Format GeoJSON gespeichert.
• Geoindizes unterstützen einen Teil der Operationen
in GeoJSON.
• Der Index wird als Quadtree gespeichert.
• Er entspricht dem Standard WGS 84.
20
Koordinaten
• Koordinaten repräsentieren den Längen- und Breitengrad eines Orts.
• Längengrad
– Position östlich oder westlich des durch Greenwich (London) verlaufenden
Nullmeridians
– Positiver Längengrad (bis 180°): Position östlich von Greenwich;
negativer Längengrad: Position westlich von Greenwich
• Breitengrad
– Position nördlich (0 bis 90°) oder südlich des Äquators (0 bis -90°)
• MongoDB speichert Koordinaten als Längengrad/Breitengrad.
• Google speichert Koordinaten als Breitengrad/Längengrad.
21
Versionen des sphärischen 2D-Index
• In MongoDB gibt es drei Versionen des sphärischen 2D-
Index:
• Version 1: bis MongoDB 2.4
• Version 2: ab MongoDB 2.6
• Version 3: ab MongoDB 3.2
• In diesem Webinar beschränken wir uns auf Version 3.
22
Erstellen eines sphärischen 2D-Index
db.collection.createIndex
( { <location field> : "2dsphere" } )
•Das „location field“ muss Koordinaten oder GeoJSON-Daten enthalten.
23
Beispiel
>> db.test.createIndex( { loc : "2dsphere" } )
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
24
Ergebnis
>> db.test.getIndexes()
[
{
"v" : 1,
"key" : {
"loc" : "2dsphere"
},
"name" : "loc_2dsphere",
"ns" : "geo.test",
"2dsphereIndexVersion" : 3
}
]
>>
25
Standortbasierte Anfragen –
ein Beispiel mit zwei einfachen Collections
• Wir suchen ein Restaurant in Manhattan.
• Zwei Collections stehen zur Auswahl:
– https://raw.githubusercontent.com/mongodb/docs-assets/geospatial/neighborhoods.json
– https://raw.githubusercontent.com/mongodb/docs-assets/geospatial/restaurants.json
• Wir importieren sie in MongoDB:
– mongoimport –c neighborhoods –d geo neighborhoods.json
– mongoimport –c restaurants –d geo restaurants.json
26
Die Collection „Neighborhood“ (Stadtteil)
MongoDB Enterprise > db.neighborhoods.findOne()
{
"_id" : ObjectId("55cb9c666c522cafdb053a1a"),
"geometry" : {
"coordinates" : [
[
[
-73.94193078816193,
40.70072523469547
],
...
[
-73.94409591260093,
40.69897295461309
],
]
"type" : "Polygon"
},
"name" : "Bedford"
}
27
Die Collection „Restaurants“
MongoDB Enterprise > db.restaurants.findOne()
{
"_id" : ObjectId("55cba2476c522cafdb053adf"),
"location" : {
"coordinates" : [
-73.98241999999999,
40.579505
],
"type" : "Point"
},
"name" : "Riviera Caterer"
}
MongoDB Enterprise >
Sie können diese Koordinaten in
Google Maps eingeben. Denken Sie
daran, dass der Längengrad bei
MongoDB die erste und bei Google die
zweite der beiden Koordinaten ist.
28
Hinzufügen von Indizes
MongoDB Enterprise > db.restaurants.createIndex({ location: "2dsphere" })
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
MongoDB Enterprise > db.neighborhoods.createIndex({ geometry: "2dsphere" })
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
MongoDB Enterprise >
29
Ermitteln des Stadtteils mit $geoIntersects
• Nehmen wir an, unsere Koordinaten seien -73.93414657, 40.82302903.
• In welchem Stadtteil sind wir? Das zeigt uns $geoIntersects
db.neighborhoods.findOne({ geometry:
{ $geoIntersects:
{ $geometry:
{ type: "Point",
coordinates:
[ -73.93414657,
40.82302903 ]}}}})
30
Ergebnisse
{
"geometry" : {
”coordinates" : [
[
-73.9338307684026,
40.81959665747723
],
...
[
-73.93383000695911,
40.81949109558767
]
]
"type" : "Polygon"
},
"name" : "Central Harlem North-Polo Grounds"
}
31
Alle Restaurants im Umkreis von 0,35 km
db.restaurants.find({ location:
{ $geoWithin: { $centerSphere:
[ [ -73.93414657, 40.82302903 ], 5 /
6,378.1 ] } } })
Entfernung in
km
Entfernung in
km
Teilen Sie die
Entfernung durch den
Erdradius, um den Wert
im Bogenmaß zu
erhalten.
Teilen Sie die
Entfernung durch den
Erdradius, um den Wert
im Bogenmaß zu
erhalten.
32
Ergebnisse (Projektion)
{ "name" : "Gotham Stadium Tennis Center Cafe" }
{ "name" : "Chuck E. Cheese'S" }
{ "name" : "Red Star Chinese Restaurant" }
{ "name" : "Tia Melli'S Latin Kitchen" }
{ "name" : "Domino'S Pizza" }
•Ohne Projektion
{ "_id" : ObjectId("55cba2476c522cafdb0550aa"),
"location" : { "coordinates" : [ -73.93795159999999, 40.823376 ],
"type" : "Point" },
"name" : "Domino'S Pizza" }
33
Operatoren im Überblick
• $geoIntersect: Findet Gebiete oder Punkte, die aneinander
grenzen oder einander überlappen
• $geoWithin: Findet Gebiete oder Punkte, die in einem
bestimmten Gebiet liegen
• $geoNear: Zeigt Orte nach Entfernung von einem bestimmten
Punkt sortiert an (nächster Ort zuerst)
34
Indizes im Überblick
• Textindizes: Ermöglichen das Durchsuchen von Textfeldern in
einer Collection
• Geoindizes: Ermöglichen die Suche nach Koordinaten, einer
Überlappung oder der Entfernung von einem bestimmten Punkt
35
Frage- und Antwortrunde
Back to Basics – Webinar 4: Fortschrittliche Indizierung, Text- und Geoindizes
37
• Platzhaltertext
Back to Basics – Webinar 4: Fortschrittliche Indizierung, Text- und Geoindizes
Back to Basics – Webinar 4: Fortschrittliche Indizierung, Text- und Geoindizes
Back to Basics – Webinar 4: Fortschrittliche Indizierung, Text- und Geoindizes
41
42
LOREM
IPSUM
LOREM
IPSUM
LOREM
IPSUM
LOREM
IPSUM
Sollicitudin VenenatisLOREM
IPSUM
LOREM
IPSUM
LOREM
IPSUM
LOREM
IPSUM
Grafische Elemente (Beispiele)
Porta Ultricies
Commodo Porta
Diagramme (Beispiele)
Back to Basics – Webinar 4: Fortschrittliche Indizierung, Text- und Geoindizes
{
_id : ObjectId("4c4ba5e5e8aabf3"),
employee_name: "Dunham, Justin",
department : "Marketing",
title : "Product Manager, Web",
report_up: "Neray, Graham",
pay_band: “C",
benefits : [
{ type : "Health",
plan : "PPO Plus" },
{ type : "Dental",
plan : "Standard" }
]
}
Code/Hervorhebung (Beispiele)
Aggregation Framework Flexibilität Backup Big Data Aktenkoffer
Gebäude Business Intelligence Kamera Kasse Katalog
Chat Häkchen Häkchen Cloud Geschäftsvertrag
Computer Inhalt Kont. Entwicklung Kreditkarte Kundenerfolg
Rechenzentrum Datenvielfalt Datengeschwindigkeit Datenvolumen Data Warehouse Datenbank
Dialog Ordner Dokumente Downloads Treiber Dynamisches Schema
EDW-Integration Schnellere Marktreife Dateitransfer Flexibel Zahnrad Hadoop
Zustandsprüfung Hochverfügbarkeit Horizontale Skalierung Integration in eine
Infrastruktur
Internet der Dinge Schrittweise Entwicklung
Rettungsring Diagramm Schloss Logdatei Niedrigere Kosten Lupe
Mann Handy Messgerät Überwachung Musik Neue Aps
Neue Datentypen Online Open Source Fallschirm Personalisierung Markiernadel
Plattform-Zertifizierung Produktkatalog Puzzleteile RDBMS Echtzeit-Analysen Anspruchsvolle Fragen
Rettungsring RSS Skalierbarkeit Waage Sekundärindex Lenkrad
Stopuhr Textsuche Tick-Daten Schulung Funkturm Trophäe
Frau Welt

Weitere ähnliche Inhalte

Was ist angesagt?

Fachmodell-First: Einstieg in das NoSQL-Schema-Design
Fachmodell-First: Einstieg in das NoSQL-Schema-DesignFachmodell-First: Einstieg in das NoSQL-Schema-Design
Fachmodell-First: Einstieg in das NoSQL-Schema-Design
Gregor Biswanger
 
MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-DesignMongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
Gregor Biswanger
 
Morphia, Spring Data & Co
Morphia, Spring Data & CoMorphia, Spring Data & Co
Morphia, Spring Data & Co
Tobias Trelle
 
Einführung CouchDB
Einführung CouchDBEinführung CouchDB
Einführung CouchDB
Oliver Kurowski
 
Einfuehrung in Elasticsearch
Einfuehrung in ElasticsearchEinfuehrung in Elasticsearch
Einfuehrung in Elasticsearch
Florian Hopf
 
Einführung in Elasticsearch
Einführung in ElasticsearchEinführung in Elasticsearch
Einführung in Elasticsearch
Florian Hopf
 
OOP 2013: Praktische Einführung in MongoDB
OOP 2013: Praktische Einführung in MongoDBOOP 2013: Praktische Einführung in MongoDB
OOP 2013: Praktische Einführung in MongoDB
Tobias Trelle
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDB
Tobias Trelle
 
Einführung in Elasticsearch
Einführung in ElasticsearchEinführung in Elasticsearch
Einführung in Elasticsearch
Florian Hopf
 
Ladezeiten Verbessern - Css Und JavaScript Komprimieren
Ladezeiten Verbessern - Css Und JavaScript KomprimierenLadezeiten Verbessern - Css Und JavaScript Komprimieren
Ladezeiten Verbessern - Css Und JavaScript Komprimieren
Joomla! User Group Fulda
 
2012-05-10 - UG Karlsruhe: NoSQL in .NET - mit Redis und MongoDB
2012-05-10 - UG Karlsruhe: NoSQL in .NET - mit Redis und MongoDB2012-05-10 - UG Karlsruhe: NoSQL in .NET - mit Redis und MongoDB
2012-05-10 - UG Karlsruhe: NoSQL in .NET - mit Redis und MongoDB
Johannes Hoppe
 
2012-05-14 NoSQL in .NET - mit Redis und MongoDB
2012-05-14 NoSQL in .NET - mit Redis und MongoDB2012-05-14 NoSQL in .NET - mit Redis und MongoDB
2012-05-14 NoSQL in .NET - mit Redis und MongoDB
Johannes Hoppe
 
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDBMacit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
gedoplan
 
Workshop Logfile Analyse mit Splunk
Workshop Logfile Analyse mit SplunkWorkshop Logfile Analyse mit Splunk
Workshop Logfile Analyse mit Splunk
Hannes Richter
 
OpenLDAP - A developer's perspective
OpenLDAP - A developer's perspectiveOpenLDAP - A developer's perspective
OpenLDAP - A developer's perspective
Gerrit Beine
 

Was ist angesagt? (16)

Fachmodell-First: Einstieg in das NoSQL-Schema-Design
Fachmodell-First: Einstieg in das NoSQL-Schema-DesignFachmodell-First: Einstieg in das NoSQL-Schema-Design
Fachmodell-First: Einstieg in das NoSQL-Schema-Design
 
MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-DesignMongoDB: Entwurfsmuster für das NoSQL-Schema-Design
MongoDB: Entwurfsmuster für das NoSQL-Schema-Design
 
Morphia, Spring Data & Co
Morphia, Spring Data & CoMorphia, Spring Data & Co
Morphia, Spring Data & Co
 
Einführung CouchDB
Einführung CouchDBEinführung CouchDB
Einführung CouchDB
 
Einfuehrung in Elasticsearch
Einfuehrung in ElasticsearchEinfuehrung in Elasticsearch
Einfuehrung in Elasticsearch
 
Einführung in Elasticsearch
Einführung in ElasticsearchEinführung in Elasticsearch
Einführung in Elasticsearch
 
OOP 2013: Praktische Einführung in MongoDB
OOP 2013: Praktische Einführung in MongoDBOOP 2013: Praktische Einführung in MongoDB
OOP 2013: Praktische Einführung in MongoDB
 
MongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDBMongoDB Munich 2012: Spring Data MongoDB
MongoDB Munich 2012: Spring Data MongoDB
 
Einführung in Elasticsearch
Einführung in ElasticsearchEinführung in Elasticsearch
Einführung in Elasticsearch
 
Ladezeiten Verbessern - Css Und JavaScript Komprimieren
Ladezeiten Verbessern - Css Und JavaScript KomprimierenLadezeiten Verbessern - Css Und JavaScript Komprimieren
Ladezeiten Verbessern - Css Und JavaScript Komprimieren
 
2012-05-10 - UG Karlsruhe: NoSQL in .NET - mit Redis und MongoDB
2012-05-10 - UG Karlsruhe: NoSQL in .NET - mit Redis und MongoDB2012-05-10 - UG Karlsruhe: NoSQL in .NET - mit Redis und MongoDB
2012-05-10 - UG Karlsruhe: NoSQL in .NET - mit Redis und MongoDB
 
2012-05-14 NoSQL in .NET - mit Redis und MongoDB
2012-05-14 NoSQL in .NET - mit Redis und MongoDB2012-05-14 NoSQL in .NET - mit Redis und MongoDB
2012-05-14 NoSQL in .NET - mit Redis und MongoDB
 
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDBMacit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
Macit Kandemir, Flexible Datenbank-Anwendungen mit MongoDB
 
Fly2pdf
Fly2pdfFly2pdf
Fly2pdf
 
Workshop Logfile Analyse mit Splunk
Workshop Logfile Analyse mit SplunkWorkshop Logfile Analyse mit Splunk
Workshop Logfile Analyse mit Splunk
 
OpenLDAP - A developer's perspective
OpenLDAP - A developer's perspectiveOpenLDAP - A developer's perspective
OpenLDAP - A developer's perspective
 

Ähnlich wie Back to Basics – Webinar 4: Fortschrittliche Indizierung, Text- und Geoindizes

MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)
Uwe Printz
 
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerYes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Gregor Biswanger
 
mongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - GrundlagenmongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - Grundlagen
inovex GmbH
 
Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017
Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017
Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017
MongoDB
 
Einführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenEinführung in NoSQL-Datenbanken
Einführung in NoSQL-Datenbanken
Tobias Trelle
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in Rails
Angelo Maron
 
MongoDB-Skalierung auf echter Hardware vs. Amazon EC2
MongoDB-Skalierung auf echter Hardware vs. Amazon EC2MongoDB-Skalierung auf echter Hardware vs. Amazon EC2
MongoDB-Skalierung auf echter Hardware vs. Amazon EC2
Team Internet
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1
Gregor Biswanger
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Gregor Biswanger
 
Einfuehrung in mongo_db_iks
Einfuehrung in mongo_db_iksEinfuehrung in mongo_db_iks
Hacks für mehr Traktion: Pragmatische Tipps für Low Effort und High Reward
Hacks für mehr Traktion: Pragmatische Tipps für Low Effort und High RewardHacks für mehr Traktion: Pragmatische Tipps für Low Effort und High Reward
Hacks für mehr Traktion: Pragmatische Tipps für Low Effort und High Reward
get traction GmbH
 
Daten natuerlich modellieren und verarbeiten mit Neo4j
Daten natuerlich modellieren und verarbeiten mit Neo4jDaten natuerlich modellieren und verarbeiten mit Neo4j
Daten natuerlich modellieren und verarbeiten mit Neo4j
Patrick Baumgartner
 
CSharp development with MongoDB-CSharp
CSharp development with MongoDB-CSharpCSharp development with MongoDB-CSharp
CSharp development with MongoDB-CSharp
lanwin
 
MongoDB Atlas – der beste Weg, MongoDB in der Cloud zu betreiben 2
MongoDB Atlas – der beste Weg, MongoDB in der Cloud zu betreiben 2MongoDB Atlas – der beste Weg, MongoDB in der Cloud zu betreiben 2
MongoDB Atlas – der beste Weg, MongoDB in der Cloud zu betreiben 2
MongoDB
 
SciflowWriter
SciflowWriterSciflowWriter
SciflowWriter
Michael Sievers
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
Ulrich Krause
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauen
johofer
 
aggregate is the new find: real time analytics with MongoDB
aggregate is the new find: real time analytics with MongoDBaggregate is the new find: real time analytics with MongoDB
aggregate is the new find: real time analytics with MongoDB
Marc-David Militz
 
Google-Dienste für Webseitenbetreiber
Google-Dienste für WebseitenbetreiberGoogle-Dienste für Webseitenbetreiber
Google-Dienste für Webseitenbetreiber
Thor Alexander
 

Ähnlich wie Back to Basics – Webinar 4: Fortschrittliche Indizierung, Text- und Geoindizes (20)

MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)MongoDB für Java Programmierer (JUGKA, 11.12.13)
MongoDB für Java Programmierer (JUGKA, 11.12.13)
 
Yes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-EntwicklerYes zu NoSQL mit MongoDB für .NET-Entwickler
Yes zu NoSQL mit MongoDB für .NET-Entwickler
 
mongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - GrundlagenmongoDB im Einsatz - Grundlagen
mongoDB im Einsatz - Grundlagen
 
Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017
Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017
Back to Basics Webinar-1 Einführung in NoSQL Deutsch 2017
 
Einführung in NoSQL-Datenbanken
Einführung in NoSQL-DatenbankenEinführung in NoSQL-Datenbanken
Einführung in NoSQL-Datenbanken
 
Ruby on Rails SS09 08
Ruby on Rails SS09 08Ruby on Rails SS09 08
Ruby on Rails SS09 08
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in Rails
 
MongoDB-Skalierung auf echter Hardware vs. Amazon EC2
MongoDB-Skalierung auf echter Hardware vs. Amazon EC2MongoDB-Skalierung auf echter Hardware vs. Amazon EC2
MongoDB-Skalierung auf echter Hardware vs. Amazon EC2
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
 
Einfuehrung in mongo_db_iks
Einfuehrung in mongo_db_iksEinfuehrung in mongo_db_iks
Einfuehrung in mongo_db_iks
 
Hacks für mehr Traktion: Pragmatische Tipps für Low Effort und High Reward
Hacks für mehr Traktion: Pragmatische Tipps für Low Effort und High RewardHacks für mehr Traktion: Pragmatische Tipps für Low Effort und High Reward
Hacks für mehr Traktion: Pragmatische Tipps für Low Effort und High Reward
 
Daten natuerlich modellieren und verarbeiten mit Neo4j
Daten natuerlich modellieren und verarbeiten mit Neo4jDaten natuerlich modellieren und verarbeiten mit Neo4j
Daten natuerlich modellieren und verarbeiten mit Neo4j
 
CSharp development with MongoDB-CSharp
CSharp development with MongoDB-CSharpCSharp development with MongoDB-CSharp
CSharp development with MongoDB-CSharp
 
MongoDB Atlas – der beste Weg, MongoDB in der Cloud zu betreiben 2
MongoDB Atlas – der beste Weg, MongoDB in der Cloud zu betreiben 2MongoDB Atlas – der beste Weg, MongoDB in der Cloud zu betreiben 2
MongoDB Atlas – der beste Weg, MongoDB in der Cloud zu betreiben 2
 
SciflowWriter
SciflowWriterSciflowWriter
SciflowWriter
 
C/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino DevelopersC/ C++ for Notes & Domino Developers
C/ C++ for Notes & Domino Developers
 
Einfacher bauen
Einfacher bauenEinfacher bauen
Einfacher bauen
 
aggregate is the new find: real time analytics with MongoDB
aggregate is the new find: real time analytics with MongoDBaggregate is the new find: real time analytics with MongoDB
aggregate is the new find: real time analytics with MongoDB
 
Google-Dienste für Webseitenbetreiber
Google-Dienste für WebseitenbetreiberGoogle-Dienste für Webseitenbetreiber
Google-Dienste für Webseitenbetreiber
 

Mehr von MongoDB

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB
 

Mehr von MongoDB (20)

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
 

Back to Basics – Webinar 4: Fortschrittliche Indizierung, Text- und Geoindizes

  • 1. MongoDB Europe 2016MongoDB Europe 2016 Old Billingsgate, LondonOld Billingsgate, London 15. November15. November Mit meinem CodeMit meinem Code benjaminlorenzbenjaminlorenz2020 sindsind Ihre Tickets 20 % günstiger!Ihre Tickets 20 % günstiger! mongodb.com/europemongodb.com/europe
  • 2. Back to Basics 2016 : Webinar 4 Indizierung für Fortgeschrittene: Text- und Geoindizes Benjamin Lorenz Senior Solutions Architect, MongoDB Frankfurt @benjaminlorenz V1.1
  • 3. 3 Rückblick • Webinar 1: Einführung in NoSQL – Verschiedene Typen von NoSQL-Datenbanken – MongoDB ist eine Dokumentendatenbank. • Webinar 2: Ihre erste MongoDB-Anwendung – Erstellen von Datenbanken und Collections – Erstellen, Lesen, Ändern und Löschen von Daten – Indizes und explain() • Webinar 3: Schema-Design – Dynamische Schemata – Einbettung von Dokumenten – Beispiele
  • 4. 4 Indizierung • Eine effiziente Methode, Daten über ihren Wert zu finden • Vermeidet das Durchsuchen ganzer Tabellen 1 2 3 4 5 6 7
  • 5. 5 Herkömmliche Datenbanken nutzen B-Bäume • MongoDB auch!
  • 6. 6 Komplexität O(log (n)) für select, insert & delete
  • 7. 7 Erstellen eines einfachen Index db.coll.createIndex( { fieldName : <Direction> } ) Name der Datenbank Name der Collection Befehl Name des zu indizierenden Feldes aufsteigend: 1 absteigend: -1
  • 8. 8 Zwei Arten von Indizes • Volltextindex – ermöglicht das Durchsuchen des in einem Feld enthaltenen Texts (Lucene, Solr und Elasticsearch) • Geoindex – ermöglicht die Suche nach Standort (z. B. Leute in meiner Nähe) • Diese Indizes nutzen keine B-Bäume.
  • 9. 9 Volltextindizes • Ein „invertierter Index“ für alle Wörter in einem Feld (nur ein Textindex je Collection) { “comment” : “Ich finde Ihren Blogbeitrag sehr interessant und nützlich. Ich hoffe, dass Sie mehr solche Beiträge veröffentlichen.” } >> db.posts.createIndex( { “comments” : “text” } ) MongoDB Enterprise > db.posts.find( { $text: { $search : “beitrag" }} ) { "_id" : ObjectId(“…"), "comment" : “Ich finde Ihren Blogbeitrag sehr interessant und nützlich. Ich hoffe, dass Sie mehr solche Beiträge veröffentlichen.” } MongoDB Enterprise >
  • 10. 10 Ergebnisse MongoDB Enterprise > db.posts.getIndexes() ... { "v" : 1, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "comment_text", "ns" : "test.posts", "weights" : { "comment" : 1 }, "default_language" : "english", "language_override" : "language", "textIndexVersion" : 3 }
  • 11. 11 Löschen von Textindizes • Zum Löschen eines Index wird der Indexname benötigt. db.posts.getIndexes() { "v" : 1, "key" : { "_fts" : "text", "_ftsx" : 1 }, "name" : "comment_text", "ns" : "test.posts", "weights" : { "comment" : 1 }, "default_language" : "english", "language_override" : "language", "textIndexVersion" : 3 }
  • 12. 12 Also MongoDB Enterprise > db.posts.dropIndex( "comment_text" ) { "nIndexesWas" : 2, "ok" : 1 } MongoDB Enterprise > •Sie können Indizes Namen geben: MongoDB Enterprise > db.posts.createIndex( { "comments" : "text“ }, { "name" : "text_index" } ) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
  • 13. 13 Auf dem Server I INDEX [conn275] build index on: test.posts properties: { v: 1, key: { _fts: "text", _ftsx: 1 }, name: "comment_text", ns: "test.posts", weights: { comment: 1 }, default_language: "english", language_override: "language", textIndexVersion: 3 }} I INDEX [conn275] building index using bulk method I INDEX [conn275] build index done. scanned 3 total records. 0 secs
  • 14. 14 Ein ausführlicheres Beispiel >> db.posts.insert( { "comment" : "Rot gelb orange gruen" } ) >> db.posts.insert( { "comment" : "Pink lila blau" } ) >> db.posts.insert( { "comment" : "Rot Pink" } ) >> db.posts.find( { "$text" : { "$search" : "Rot" }} ) { "_id" : ObjectId(“…”), "comment" : "Rot gelb orange gruen" } ) { "_id" : ObjectId( »…"), "comment" : "Rot Pink" } ) >> db.posts.find( { "$text" : { "$search" : "Rot Gruen" }} ) { "_id" : ObjectId(« …"), "comment" : "Rot Pink" } ) { "_id" : ObjectId(« …"), "comment" : "Rot gelb orange gruen" } ) >> db.posts.find( { "$text" : { "$search" : "rot" }} ) # <- Case Insensitve { "_id" : ObjectId(“…"), "comment" : "Rot gelb orange gruen" } ) { "_id" : ObjectId(«…”), "comment" : "Rot Pink" } ) >>
  • 15. 15 Gewichtung • Wir können verschiedenen Feldern in einem Textindex verschiedene Gewichtungen zuweisen. • Wenn ich z. B. primär nach Tags und weniger nach Kommentaren suche, weise ich dem Tag-Feld eine höhere Gewichtung zu. >> db.blog.createIndex( { comment: "text", tags : "text” }, { weights: { comment: 5, tags : 10 }} ) • Jetzt werden Tags bei Suchvorgängen bevorzugt behandelt.
  • 16. 16 $textscore • Die Gewichtung wirkt sich auf $textscore aus: >> db.posts.find( { "$text" : { "$search" : "Rot" }}, { score: { $meta: "textScore" }} ).sort( { score: { $meta: "textScore" } } ) { "_id" : …, "comment" : "hallo", "tags" : "Rot gruen orange", "score" : 6.666666666666666 } { "_id" : …, "comment" : "Rot Pink", "score“ : 3.75 } { "_id" : …, "comment" : "Rot gelb orange gruen", "score“ : 3.125 } >>
  • 17. 17 Weitere Parameter • Berücksichtigen der Groß- und Kleinschreibung bei der Suche: – $caseSensitive : true (default false) • Berücksichtigen von Umlauten und Buchstaben mit Akzenten: – $diacriticSensitive : True (default false)
  • 19. 19 Geoindizes • MongoDB unterstützt Indizes, die auf zweidimensionalen sphärischen Koordinaten basieren (sphärische 2D-Indizes). • Damit können Punkte auf der Erde abgebildet werden. • Die Koordinaten werden im Format GeoJSON gespeichert. • Geoindizes unterstützen einen Teil der Operationen in GeoJSON. • Der Index wird als Quadtree gespeichert. • Er entspricht dem Standard WGS 84.
  • 20. 20 Koordinaten • Koordinaten repräsentieren den Längen- und Breitengrad eines Orts. • Längengrad – Position östlich oder westlich des durch Greenwich (London) verlaufenden Nullmeridians – Positiver Längengrad (bis 180°): Position östlich von Greenwich; negativer Längengrad: Position westlich von Greenwich • Breitengrad – Position nördlich (0 bis 90°) oder südlich des Äquators (0 bis -90°) • MongoDB speichert Koordinaten als Längengrad/Breitengrad. • Google speichert Koordinaten als Breitengrad/Längengrad.
  • 21. 21 Versionen des sphärischen 2D-Index • In MongoDB gibt es drei Versionen des sphärischen 2D- Index: • Version 1: bis MongoDB 2.4 • Version 2: ab MongoDB 2.6 • Version 3: ab MongoDB 3.2 • In diesem Webinar beschränken wir uns auf Version 3.
  • 22. 22 Erstellen eines sphärischen 2D-Index db.collection.createIndex ( { <location field> : "2dsphere" } ) •Das „location field“ muss Koordinaten oder GeoJSON-Daten enthalten.
  • 23. 23 Beispiel >> db.test.createIndex( { loc : "2dsphere" } ) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
  • 24. 24 Ergebnis >> db.test.getIndexes() [ { "v" : 1, "key" : { "loc" : "2dsphere" }, "name" : "loc_2dsphere", "ns" : "geo.test", "2dsphereIndexVersion" : 3 } ] >>
  • 25. 25 Standortbasierte Anfragen – ein Beispiel mit zwei einfachen Collections • Wir suchen ein Restaurant in Manhattan. • Zwei Collections stehen zur Auswahl: – https://raw.githubusercontent.com/mongodb/docs-assets/geospatial/neighborhoods.json – https://raw.githubusercontent.com/mongodb/docs-assets/geospatial/restaurants.json • Wir importieren sie in MongoDB: – mongoimport –c neighborhoods –d geo neighborhoods.json – mongoimport –c restaurants –d geo restaurants.json
  • 26. 26 Die Collection „Neighborhood“ (Stadtteil) MongoDB Enterprise > db.neighborhoods.findOne() { "_id" : ObjectId("55cb9c666c522cafdb053a1a"), "geometry" : { "coordinates" : [ [ [ -73.94193078816193, 40.70072523469547 ], ... [ -73.94409591260093, 40.69897295461309 ], ] "type" : "Polygon" }, "name" : "Bedford" }
  • 27. 27 Die Collection „Restaurants“ MongoDB Enterprise > db.restaurants.findOne() { "_id" : ObjectId("55cba2476c522cafdb053adf"), "location" : { "coordinates" : [ -73.98241999999999, 40.579505 ], "type" : "Point" }, "name" : "Riviera Caterer" } MongoDB Enterprise > Sie können diese Koordinaten in Google Maps eingeben. Denken Sie daran, dass der Längengrad bei MongoDB die erste und bei Google die zweite der beiden Koordinaten ist.
  • 28. 28 Hinzufügen von Indizes MongoDB Enterprise > db.restaurants.createIndex({ location: "2dsphere" }) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 } MongoDB Enterprise > db.neighborhoods.createIndex({ geometry: "2dsphere" }) { "createdCollectionAutomatically" : false, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 } MongoDB Enterprise >
  • 29. 29 Ermitteln des Stadtteils mit $geoIntersects • Nehmen wir an, unsere Koordinaten seien -73.93414657, 40.82302903. • In welchem Stadtteil sind wir? Das zeigt uns $geoIntersects db.neighborhoods.findOne({ geometry: { $geoIntersects: { $geometry: { type: "Point", coordinates: [ -73.93414657, 40.82302903 ]}}}})
  • 30. 30 Ergebnisse { "geometry" : { ”coordinates" : [ [ -73.9338307684026, 40.81959665747723 ], ... [ -73.93383000695911, 40.81949109558767 ] ] "type" : "Polygon" }, "name" : "Central Harlem North-Polo Grounds" }
  • 31. 31 Alle Restaurants im Umkreis von 0,35 km db.restaurants.find({ location: { $geoWithin: { $centerSphere: [ [ -73.93414657, 40.82302903 ], 5 / 6,378.1 ] } } }) Entfernung in km Entfernung in km Teilen Sie die Entfernung durch den Erdradius, um den Wert im Bogenmaß zu erhalten. Teilen Sie die Entfernung durch den Erdradius, um den Wert im Bogenmaß zu erhalten.
  • 32. 32 Ergebnisse (Projektion) { "name" : "Gotham Stadium Tennis Center Cafe" } { "name" : "Chuck E. Cheese'S" } { "name" : "Red Star Chinese Restaurant" } { "name" : "Tia Melli'S Latin Kitchen" } { "name" : "Domino'S Pizza" } •Ohne Projektion { "_id" : ObjectId("55cba2476c522cafdb0550aa"), "location" : { "coordinates" : [ -73.93795159999999, 40.823376 ], "type" : "Point" }, "name" : "Domino'S Pizza" }
  • 33. 33 Operatoren im Überblick • $geoIntersect: Findet Gebiete oder Punkte, die aneinander grenzen oder einander überlappen • $geoWithin: Findet Gebiete oder Punkte, die in einem bestimmten Gebiet liegen • $geoNear: Zeigt Orte nach Entfernung von einem bestimmten Punkt sortiert an (nächster Ort zuerst)
  • 34. 34 Indizes im Überblick • Textindizes: Ermöglichen das Durchsuchen von Textfeldern in einer Collection • Geoindizes: Ermöglichen die Suche nach Koordinaten, einer Überlappung oder der Entfernung von einem bestimmten Punkt
  • 41. 41
  • 42. 42
  • 46. { _id : ObjectId("4c4ba5e5e8aabf3"), employee_name: "Dunham, Justin", department : "Marketing", title : "Product Manager, Web", report_up: "Neray, Graham", pay_band: “C", benefits : [ { type : "Health", plan : "PPO Plus" }, { type : "Dental", plan : "Standard" } ] } Code/Hervorhebung (Beispiele)
  • 47. Aggregation Framework Flexibilität Backup Big Data Aktenkoffer Gebäude Business Intelligence Kamera Kasse Katalog Chat Häkchen Häkchen Cloud Geschäftsvertrag Computer Inhalt Kont. Entwicklung Kreditkarte Kundenerfolg
  • 48. Rechenzentrum Datenvielfalt Datengeschwindigkeit Datenvolumen Data Warehouse Datenbank Dialog Ordner Dokumente Downloads Treiber Dynamisches Schema EDW-Integration Schnellere Marktreife Dateitransfer Flexibel Zahnrad Hadoop Zustandsprüfung Hochverfügbarkeit Horizontale Skalierung Integration in eine Infrastruktur Internet der Dinge Schrittweise Entwicklung
  • 49. Rettungsring Diagramm Schloss Logdatei Niedrigere Kosten Lupe Mann Handy Messgerät Überwachung Musik Neue Aps Neue Datentypen Online Open Source Fallschirm Personalisierung Markiernadel Plattform-Zertifizierung Produktkatalog Puzzleteile RDBMS Echtzeit-Analysen Anspruchsvolle Fragen
  • 50. Rettungsring RSS Skalierbarkeit Waage Sekundärindex Lenkrad Stopuhr Textsuche Tick-Daten Schulung Funkturm Trophäe Frau Welt

Hinweis der Redaktion

  1. Wer bin ich, seit wann arbeite ich bei MongoDB
  2. Jedes Element in einem Knoten eines B-Baums verweist auf einen Teilbaum, der Elemente mit einem niedrigeren Schlüsselwert enthält als der Knoten selbst. Bevor ein neues Element eingefügt werden kann, ist eine Leseoperation erforderlich. Schreiboperationen, für die ein Knoten geteilt werden muss, sind teuer.
  3. Im Grunde die Höhe des Baums
  4. Produktversionen &amp; -nummern
  5. Karte aufrufen, um Standort zu finden
  6. Riviera auf Google Maps zeigen