Datensuche mit NoSQLKai Spichale27.01.2013
Über mich►   Kai Spichale►   Softwarearchitekt und -entwickler bei adesso AG►   Schwerpunkt: Java-Technologien►   Autor ve...
Motivation  NoSQL                                   Suche  ►   Exponentielles Datenwachstum        ► Datenzugriff ändert s...
Agenda►   Lucene Volltextsuchen►   NoSQL:    > Architekturtreiber    > MongoDB    > Neo4j    > Apache Cassandra    > Apach...
Volltextsuchen►   Aufgabe: Auffinden von Texten in einer Vielzahl von Dateien oder Datensätzen►   Naiver Ansatz mit linear...
Apache Lucene►   Java-Bibliothek für Volltextsuchen►   De-facto-Standard im Bereich Open-Source-Suchlösungen►   Merkmale: ...
Textanalyse                   Extrahieren,                     ParsenDokumente                                           C...
Textanalyse                                      Stopword List                 Eat your                                   ...
Abfragetypen Abfrage                                 Beispiel Termsuche                               +dog –snoopy (MUST, ...
NoSQL und Datensuche„One size fits all“-Ansatz►   Welche NoSQL-Datenbank erfüllt    die Anforderungen am besten?►   Wird V...
NoSQL und DatensucheWas bieten diese Datenbanken?►   MongoDB►   Neo4j►   Apache Cassandra►   Apache Hadoop27.01.2013   10 ...
Dokumentenorientierte Datenbanken►    Speichern Daten in Form von Dokumenten►    Semistrukturierte Inhalte►    JSON, YAML,...
MongoDB►   Ad-hoc-Abfragen für Dokumente oder einzelne Felder     db.things.find({firstname:"John"})►   Abfragen mit serve...
MongoDB►   Mongo-Connector synchronisiert Daten aus MongoDB mit einem Zielsystem    (z.B.: Solr, Elastic Search)►   Archit...
MongoDBMongoDB                                MongoDB + Lucene           Lucene Kein Ergebnis-Mergen                  Vo...
Graphendatenbanken►   Informationen werden als Graphen modelliert    > Knoten    > Kanten (auch Relationships)    > Eigens...
Neo4j►   Traversierung:    > Tiefensuche, Breitensuche    > Gremlin, Cypher       START person=node:peoplesearch(name=‘Joh...
Neo4j►   Ganze Datenbank ist natürlicher Index bestehend aus Knoten oder Beziehungen    > Beispiele: „name“, „city“    per...
Neo4j    ►   Unterstützt Lucene-basierte Volltextindizes@NodeEntityclass Person {@Indexed(indexName="peoplesearch", indexT...
Wide Column Store►   Google BigTable: „a sparse, distributed multi-dimensional sorted map“►   Daten organisiert in Zeilen,...
Apache Cassandra►   BigTable-Klon►   Distributed Hash Table (Amazon Dynamo)►   Schlussendlich konsistent, konfigurierbar► ...
Apache Cassandra►   Solandra: Solr mit Cassandra als Backend statt Dateisystem►   DataStax Enterprise Search    > Daten in...
Apache Hadoop►   Open Source Projekt zur Verarbeitung von großen Datenmengen (BigData) im    Computercluster►   Skalierbar...
Hadoop MapReduce►   Map Phase:                                                     Persistente Daten    > Datensätze werde...
Hadoop MapReduce►   Allgemeine Funktionsweise eines MapReduce-Jobs                  map(k, v) -> [(K1,V1), (K2,V2), ... ] ...
Wie löst man Probleme mit MapReduce?►   Problemklassen ohne Reduce-Phase    > Suchen    > Massenkonvertierung    > Sortier...
Hadoop MapReduce: Suchen►   Suche nach „A“                                           Mapper emittiert nur Records         ...
Hadoop MapReduce: Indizieren►   HDFS speichert Rohdaten►   Mapper indiziert Daten mit Lucene    > SolrInputDocument erzeug...
Hadoop MapReduce: Indizieren                                                       @Override                              ...
Apache Tika►   Extrahiert Metadaten und strukturierten Text aus Dokumenten:    > HTML, MS Office Dokumente, PDF, etc.►   S...
Apache Solr►   Lucene ist eine Programmbibliothek, kein Suchserver►   Suchserver:    > Solr    > ElasticSearch            ...
Apache Flume                                     ►     Verteilter Dienst zum Sammeln, Aggregieren              Web Server,...
Alternativen                                                    ►    Nutch Crawler erzeugt einen Datensatz                ...
Apache Hadoop                                            ►   Fundamentaler Mismatch:                                      ...
Zusammenfassung►   Mehr semistrukturierte Daten►   Bedeutung von Volltextsuchen wächst►   Kombination von NoSQL-Store und ...
Upcoming SlideShare
Loading in...5
×

OOP 2013 NoSQL Suche

989

Published on

Diese Präsentation hat Kai Spichale auf der OOP 2013 gehalten und erläutert verschiedene Ansätze für die Suche in NoSQL-Datenbanken.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
989
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
19
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

OOP 2013 NoSQL Suche

  1. 1. Datensuche mit NoSQLKai Spichale27.01.2013
  2. 2. Über mich► Kai Spichale► Softwarearchitekt und -entwickler bei adesso AG► Schwerpunkt: Java-Technologien► Autor verschiedener Fachartikel, Sprecher auf Konferenzen► adesso gehört zu den führenden IT-Dienstleistern im deutschsprachigen Raum► Beratung und individuelle Softwareentwicklung► Mehr als 1000 Mitarbeiter► Zu den wichtigsten Kunden zählen die Allianz, Hannover Rück, Union Investment, Westdeutsche Lotterie, Zurich Versicherung, DEVK und DAK27.01.2013 1 OOP 2013 Kai Spichale
  3. 3. Motivation NoSQL Suche ► Exponentielles Datenwachstum ► Datenzugriff ändert sich: ► Semistrukturierte Daten > Volltextsuche wird wichtiger > Benutzererwartungen steigen ► Stärker vernetzt ► Suche über bekannte ► 80% der unternehmensrelevanten Schlüsselbegriffe oder über ein Informationen in unstrukturierter Katalogsystem sind für große Form, hauptsächlich Text Datenbestände unpraktisch27.01.2013 2 OOP 2013 Kai Spichale
  4. 4. Agenda► Lucene Volltextsuchen► NoSQL: > Architekturtreiber > MongoDB > Neo4j > Apache Cassandra > Apache Hadoop► Schlussbemerkung27.01.2013 3 OOP 2013 Kai Spichale
  5. 5. Volltextsuchen► Aufgabe: Auffinden von Texten in einer Vielzahl von Dateien oder Datensätzen► Naiver Ansatz mit linearer Suche à la grep: > O(n), langsam > Negation ist schwierig > Fehlende Unterscheidung von Phrasen und Schlüsselwörtern► Invertierter Index: > Term Dokument > Jedem Term werden Informationen über das Vorkommen des Terms in den Dokumenten zugeordnet27.01.2013 4 OOP 2013 Kai Spichale
  6. 6. Apache Lucene► Java-Bibliothek für Volltextsuchen► De-facto-Standard im Bereich Open-Source-Suchlösungen► Merkmale: > Anwendungsneutral > Gute Performance► Funktionalität: > Bewertete und nach Rang sortierte Suchen > Viele Abfragetypen, Facettennavigation > Suche nach einzelnen Feldern > Sortierung > Multi-Index-Suchen > Parallele Suche und Update27.01.2013 5 OOP 2013 Kai Spichale
  7. 7. Textanalyse Extrahieren, ParsenDokumente Character Filter Tokenizer Token Filter de.GermanAnalyzer: StandardTokenizer > StandardFilter Invertierter > LowerCaseFilter > StopFilter > GermanStemFilter Index 27.01.2013 6 OOP 2013 Kai Spichale
  8. 8. Textanalyse Stopword List Eat your ID Term Document own dog food. a 1 come 2 and around 2 dog 1 every 3 eat 1 for from 4 exception 3 First in come, 5 first 2 is first it 5 food 1 served. not 6 own 1 on one 7 prove 3 the to 8 rule 3 The under 9 serve 2 exception proves the 10 your 1 rule.27.01.2013 7 OOP 2013 Kai Spichale
  9. 9. Abfragetypen Abfrage Beispiel Termsuche +dog –snoopy (MUST, MUST_NOT, SHOULD) Phrasensuche „foo bar“ Wildcard fo*a? Fuzzy fobar~ Range [A TO Z]27.01.2013 8 OOP 2013 Kai Spichale
  10. 10. NoSQL und Datensuche„One size fits all“-Ansatz► Welche NoSQL-Datenbank erfüllt die Anforderungen am besten?► Wird Volltextsuche unterstützt? Performance Volumen Konsistenz Datenstruktur Datenzugriff Verfügbarkeit Änderungen27.01.2013 9 OOP 2013 Kai Spichale
  11. 11. NoSQL und DatensucheWas bieten diese Datenbanken?► MongoDB► Neo4j► Apache Cassandra► Apache Hadoop27.01.2013 10 OOP 2013 Kai Spichale
  12. 12. Dokumentenorientierte Datenbanken► Speichern Daten in Form von Dokumenten► Semistrukturierte Inhalte► JSON, YAML, XML { "_id" : ObjectId(„42"), "firstname" : "John", "lastname" : "Lennon", "address" : { "city" : "Liverpool", "street" : "251 Menlove Avenue“ } }27.01.2013 11 OOP 2013 Kai Spichale
  13. 13. MongoDB► Ad-hoc-Abfragen für Dokumente oder einzelne Felder db.things.find({firstname:"John"})► Abfragen mit serverseitig ausgeführten JavaScript-Funktionen► Aggregationen, MapReduce► Einfache Textsuchen > Mit Multikeys können Werte eines Arrays indiziert werden { article : “some long text", _keywords : [ “some" , “long" , “text“] }27.01.2013 12 OOP 2013 Kai Spichale
  14. 14. MongoDB► Mongo-Connector synchronisiert Daten aus MongoDB mit einem Zielsystem (z.B.: Solr, Elastic Search)► Architektur mit separaten Suchserver möglich Doc update sync erstellen indizieren suchen 1 2 3 4 5 Mongo MongoDB Connector Solr27.01.2013 13 OOP 2013 Kai Spichale
  15. 15. MongoDBMongoDB MongoDB + Lucene Lucene Kein Ergebnis-Mergen  Volltextsuchen mit  Kein Ergebnis-Mergen Stemming, Faceting Komplexe Queries mit  Komplexe Queries mit  Volltextsuchen mit Aggregationen Aggregationen Stemming, Faceting Nur einfache  Mergen notwendig  Keine Transaktion Textsuchen  Erhöhte Komplexität  Keine partiellen (Entwicklung, Betrieb) Dokumentupdates  Verwendet Schema 27.01.2013 14 OOP 2013 Kai Spichale
  16. 16. Graphendatenbanken► Informationen werden als Graphen modelliert > Knoten > Kanten (auch Relationships) > Eigenschaften (auch Properties)► Universelles Datenmodell id=1 id=3► Traversierung name=“John“ name=“Paul“ Beispiel: Neo4j fri d► en en fri d id=2 name=“George“27.01.2013 15 OOP 2013 Kai Spichale
  17. 17. Neo4j► Traversierung: > Tiefensuche, Breitensuche > Gremlin, Cypher START person=node:peoplesearch(name=‘John’) MATCH person<-[:friends]->afriend RETURN afriend Ergebnis = George27.01.2013 16 OOP 2013 Kai Spichale
  18. 18. Neo4j► Ganze Datenbank ist natürlicher Index bestehend aus Knoten oder Beziehungen > Beispiele: „name“, „city“ personRepository.findByPropertyValue("name", "John");► Auto-Indexing verfolgt alle Property-Änderungen27.01.2013 17 OOP 2013 Kai Spichale
  19. 19. Neo4j ► Unterstützt Lucene-basierte Volltextindizes@NodeEntityclass Person {@Indexed(indexName="peoplesearch", indexType=IndexType.FULLTEXT)private String name;..}Index<PropertyContainer> index = template.getIndex("peoplesearch");index.query("name", "Jo*"); 27.01.2013 18 OOP 2013 Kai Spichale
  20. 20. Wide Column Store► Google BigTable: „a sparse, distributed multi-dimensional sorted map“► Daten organisiert in Zeilen, Spaltenfamilien und Spalten► Ideal für zeilenweises Sharding (horizontale Skalierung) Unterschiedliche Spalten pro Zeile möglich address name pmccart „Liverpool ..“ „McCartney“ address name state Eindeutige jlennon Zeilenschlüssel „Liverpool ..“ „Lennon“ „UK“ name gharris „Harrison“27.01.2013 19 OOP 2013 Kai Spichale
  21. 21. Apache Cassandra► BigTable-Klon► Distributed Hash Table (Amazon Dynamo)► Schlussendlich konsistent, konfigurierbar► Datenabfrage: > Cassandra Query Language (CQL) = SQL-Dialekt ohne Joins SELECT name FROM user WHERE firstname=„John“; > Hadoop-Integration27.01.2013 20 OOP 2013 Kai Spichale
  22. 22. Apache Cassandra► Solandra: Solr mit Cassandra als Backend statt Dateisystem► DataStax Enterprise Search > Daten in Cassandra werden lokal in Solr indiziert und umgekehrt > Integration durch Secondary Index API > CQL unterstützt Solr-Queries SELECT title FROM solr WHERE solr_query=‘name:jo*; > Dokumentenweise werden die Cassandra Solr Daten im Cluster verteilt Column Family Core > Nutzt Cassandra Ringinformationen Row Document für Solr Distributed Search Query Row Key Unique Column Field Node Shard27.01.2013 21 OOP 2013 Kai Spichale
  23. 23. Apache Hadoop► Open Source Projekt zur Verarbeitung von großen Datenmengen (BigData) im Computercluster► Skalierbar, ausfallsicher► Umfangreiches Hadoop Ökosystem► Hadoop Distributed File System, Hadoop MapReduce27.01.2013 22 OOP 2013 Kai Spichale
  24. 24. Hadoop MapReduce► Map Phase: Persistente Daten > Datensätze werden in Map-Funktion verarbeitet Map Map Map Map► Shuffle/Combine Phase: > Verteilte Sortierung und Gruppierung Transiente Daten Reduce Reduce Reduce► Reduce Phase: > Verarbeitung des Zwischenergebnisses in Reduce-Funktion Persistente Daten27.01.2013 23 OOP 2013 Kai Spichale
  25. 25. Hadoop MapReduce► Allgemeine Funktionsweise eines MapReduce-Jobs map(k, v) -> [(K1,V1), (K2,V2), ... ] Mapper Daten Shuffle Reducer Ergebnis reduce(Kn, [Vi, Vj, …]) -> (Km, R)27.01.2013 24 OOP 2013 Kai Spichale
  26. 26. Wie löst man Probleme mit MapReduce?► Problemklassen ohne Reduce-Phase > Suchen > Massenkonvertierung > Sortieren > Map-Side Join► Problemklassen mit Reduce-Phase > Gruppieren und Aggregieren > Reduce-Side Join27.01.2013 25 OOP 2013 Kai Spichale
  27. 27. Hadoop MapReduce: Suchen► Suche nach „A“ Mapper emittiert nur Records mit Suchkriterium Daten 1 1: A,B,C 2 1 2: D,E 4 3 3: B,E 5 4 4: A,D 5: A,C,E 5 Ergebnis = 1, 4, 527.01.2013 26 OOP 2013 Kai Spichale
  28. 28. Hadoop MapReduce: Indizieren► HDFS speichert Rohdaten► Mapper indiziert Daten mit Lucene > SolrInputDocument erzeugen und StreamingUpdateSolrServer aufrufen MapReduce HDFS Job Lucene Lucene Index 27.01.2013 27 OOP 2013 Kai Spichale
  29. 29. Hadoop MapReduce: Indizieren @Override public void map( LongWritable key, Text val, OutputCollector<NullWritable, NullWritable> output, Reporter reporter) throws IOException { Mapper st = new StringTokenizer(val.toString()); Daten 1 lineCounter = 0;1: text 2 while (st.hasMoreTokens()) {2: text doc= new SolrInputDocument(); 33: text doc.addField("id", fileName + 44: text key.toString() + lineCounter++);5: text 5 doc.addField("txt", st.nextToken()); Ergebnis try { ist null server.add(doc); } catch (Exception exp) { … } }} 27.01.2013 28 OOP 2013 Kai Spichale
  30. 30. Apache Tika► Extrahiert Metadaten und strukturierten Text aus Dokumenten: > HTML, MS Office Dokumente, PDF, etc.► Stream-Parser auch für große Dokumente geeignet Tika MapReduce HDFS Job Lucene Lucene Index 27.01.2013 29 OOP 2013 Kai Spichale
  31. 31. Apache Solr► Lucene ist eine Programmbibliothek, kein Suchserver► Suchserver: > Solr > ElasticSearch Tika MapReduce HDFS Job Solr Lucene Lucene Index 27.01.2013 30 OOP 2013 Kai Spichale
  32. 32. Apache Flume ► Verteilter Dienst zum Sammeln, Aggregieren Web Server, und Kopieren großen Datenmengen Applikationen ► Streaming-Techniken ► Fehlertolerant Flume Tika MapReduce HDFS Job Solr Lucene Lucene Index27.01.2013 31 OOP 2013 Kai Spichale
  33. 33. Alternativen ► Nutch Crawler erzeugt einen Datensatz pro URL in CrawlDB Web Server, Apps, DBs ► Hadoop DistCp kopiert Daten innerhalb/ zwischen Hadoop-Clustern ► Apache Sqoop transferiert Bulk-Daten zwischen Hadoop und RDBMSFlume Crawler DistCp Sqoop Tika MapReduce HDFS Job Solr Lucene Lucene Index27.01.2013 32 OOP 2013 Kai Spichale
  34. 34. Apache Hadoop ► Fundamentaler Mismatch: > MapReduce ideal für Batch-Verarbeitung Web Content, > Lucene für interaktive Suchen Intranet ► MapReduce zum Indizieren von großen Datenmengen ► Geeignet für (offline) Big-Data-Lösung Loading Werkzeug Hadoop Suche Analyse Export Visualisierung27.01.2013 33 OOP 2013 Kai Spichale
  35. 35. Zusammenfassung► Mehr semistrukturierte Daten► Bedeutung von Volltextsuchen wächst► Kombination von NoSQL-Store und Lucene: > MongoDB: Integration mit Mongo Connector > Neo4j: native Integration > Cassandra: „Online BigData“ > Hadoop: „Offline BigData“► Alternative: Suchserver als dokumentenorientierte Datenbank27.01.2013 34 OOP 2013 Kai Spichale
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×