OOP 2013 NoSQL Suche

  • Published on
    28-Nov-2014

  • View
    1.160

  • Download
    1

DESCRIPTION

Diese Prsentation hat Kai Spichale auf der OOP 2013 gehalten und erlutert verschiedene Anstze fr die Suche in NoSQL-Datenbanken.

Transcript

  • 1. Datensuche mit NoSQLKai Spichale27.01.2013
  • 2. ber mich Kai Spichale Softwarearchitekt und -entwickler bei adesso AG Schwerpunkt: Java-Technologien Autor verschiedener Fachartikel, Sprecher auf Konferenzen adesso gehrt zu den fhrenden IT-Dienstleistern im deutschsprachigen Raum Beratung und individuelle Softwareentwicklung Mehr als 1000 Mitarbeiter Zu den wichtigsten Kunden zhlen die Allianz, Hannover Rck, Union Investment, Westdeutsche Lotterie, Zurich Versicherung, DEVK und DAK27.01.2013 1 OOP 2013 Kai Spichale
  • 3. Motivation NoSQL Suche Exponentielles Datenwachstum Datenzugriff ndert sich: Semistrukturierte Daten > Volltextsuche wird wichtiger > Benutzererwartungen steigen Strker vernetzt Suche ber bekannte 80% der unternehmensrelevanten Schlsselbegriffe oder ber ein Informationen in unstrukturierter Katalogsystem sind fr groe Form, hauptschlich Text Datenbestnde unpraktisch27.01.2013 2 OOP 2013 Kai Spichale
  • 4. Agenda Lucene Volltextsuchen NoSQL: > Architekturtreiber > MongoDB > Neo4j > Apache Cassandra > Apache Hadoop Schlussbemerkung27.01.2013 3 OOP 2013 Kai Spichale
  • 5. Volltextsuchen Aufgabe: Auffinden von Texten in einer Vielzahl von Dateien oder Datenstzen Naiver Ansatz mit linearer Suche la grep: > O(n), langsam > Negation ist schwierig > Fehlende Unterscheidung von Phrasen und Schlsselwrtern 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. Apache Lucene Java-Bibliothek fr Volltextsuchen De-facto-Standard im Bereich Open-Source-Suchlsungen Merkmale: > Anwendungsneutral > Gute Performance Funktionalitt: > 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. 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. 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. 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. NoSQL und DatensucheOne size fits all-Ansatz Welche NoSQL-Datenbank erfllt die Anforderungen am besten? Wird Volltextsuche untersttzt? Performance Volumen Konsistenz Datenstruktur Datenzugriff Verfgbarkeit nderungen27.01.2013 9 OOP 2013 Kai Spichale
  • 11. NoSQL und DatensucheWas bieten diese Datenbanken? MongoDB Neo4j Apache Cassandra Apache Hadoop27.01.2013 10 OOP 2013 Kai Spichale
  • 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. MongoDB Ad-hoc-Abfragen fr Dokumente oder einzelne Felder db.things.find({firstname:"John"}) Abfragen mit serverseitig ausgefhrten JavaScript-Funktionen Aggregationen, MapReduce Einfache Textsuchen > Mit Multikeys knnen Werte eines Arrays indiziert werden { article : some long text", _keywords : [ some" , long" , text] }27.01.2013 12 OOP 2013 Kai Spichale
  • 14. MongoDB Mongo-Connector synchronisiert Daten aus MongoDB mit einem Zielsystem (z.B.: Solr, Elastic Search) Architektur mit separaten Suchserver mglich Doc update sync erstellen indizieren suchen 1 2 3 4 5 Mongo MongoDB Connector Solr27.01.2013 13 OOP 2013 Kai Spichale
  • 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 Erhhte Komplexitt Keine partiellen (Entwicklung, Betrieb) Dokumentupdates Verwendet Schema 27.01.2013 14 OOP 2013 Kai Spichale
  • 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=George27.01.2013 15 OOP 2013 Kai Spichale
  • 17. Neo4j Traversierung: > Tiefensuche, Breitensuche > Gremlin, Cypher START person=node:peoplesearch(name=John) MATCH personafriend RETURN afriend Ergebnis = George27.01.2013 16 OOP 2013 Kai Spichale
  • 18. Neo4j Ganze Datenbank ist natrlicher 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. Neo4j Untersttzt Lucene-basierte Volltextindizes@NodeEntityclass Person {@Indexed(indexName="peoplesearch", indexType=IndexType.FULLTEXT)private String name;..}Index index = template.getIndex("peoplesearch");index.query("name", "Jo*"); 27.01.2013 18 OOP 2013 Kai Spichale
  • 20. Wide Column Store Google BigTable: a sparse, distributed multi-dimensional sorted map Daten organisiert in Zeilen, Spaltenfamilien und Spalten Ideal fr zeilenweises Sharding (horizontale Skalierung) Unterschiedliche Spalten pro Zeile mglich address name pmccart Liverpool .. McCartney address name state Eindeutige jlennon Zeilenschlssel Liverpool .. Lennon UK name gharris Harrison27.01.2013 19 OOP 2013 Kai Spichale
  • 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. 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 untersttzt 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 fr Solr Distributed Search Query Row Key Unique Column Field Node Shard27.01.2013 21 OOP 2013 Kai Spichale
  • 23. Apache Hadoop Open Source Projekt zur Verarbeitung von groen Datenmengen (BigData) im Computercluster Skalierbar, ausfallsicher Umfangreiches Hadoop kosystem Hadoop Distributed File System, Hadoop MapReduce27.01.2013 22 OOP 2013 Kai Spichale
  • 24. Hadoop MapReduce Map Phase: Persistente Daten > Datenstze 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. 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. Wie lst 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. 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. 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. Hadoop MapReduce: Indizieren @Override public void map( LongWritable key, Text val, OutputCollector 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. Apache Tika Extrahiert Metadaten und strukturierten Text aus Dokumenten: > HTML, MS Office Dokumente, PDF, etc. Stream-Parser auch fr groe Dokumente geeignet Tika MapReduce HDFS Job Lucene Lucene Index 27.01.2013 29 OOP 2013 Kai Spichale
  • 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. Apache Flume Verteilter Dienst zum Sammeln, Aggregieren Web Server, und Kopieren groen Datenmengen Applikationen Streaming-Techniken Fehlertolerant Flume Tika MapReduce HDFS Job Solr Lucene Lucene Index27.01.2013 31 OOP 2013 Kai Spichale
  • 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. Apache Hadoop Fundamentaler Mismatch: > MapReduce ideal fr Batch-Verarbeitung Web Content, > Lucene fr interaktive Suchen Intranet MapReduce zum Indizieren von groen Datenmengen Geeignet fr (offline) Big-Data-Lsung Loading Werkzeug Hadoop Suche Analyse Export Visualisierung27.01.2013 33 OOP 2013 Kai Spichale
  • 35. Zusammenfassung Mehr semistrukturierte Daten Bedeutung von Volltextsuchen wchst 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