SlideShare una empresa de Scribd logo
1 de 35
Descargar para leer sin conexión
Datensuche mit NoSQL


Kai Spichale




27.01.2013
Ü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 DAK



27.01.2013   1   OOP 2013 Kai Spichale
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 unpraktisch




27.01.2013   2   OOP 2013 Kai Spichale
Agenda

►   Lucene Volltextsuchen
►   NoSQL:
    > Architekturtreiber
    > MongoDB
    > Neo4j
    > Apache Cassandra
    > Apache Hadoop
►   Schlussbemerkung




27.01.2013   3   OOP 2013 Kai Spichale
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 zugeordnet




27.01.2013   4   OOP 2013 Kai Spichale
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 Update


27.01.2013   5   OOP 2013 Kai Spichale
Textanalyse




                   Extrahieren,
                     Parsen
Dokumente
                                           Character
                                             Filter

                                                       Tokenizer


                                                                   Token Filter



 de.GermanAnalyzer:
 StandardTokenizer > StandardFilter                                         Invertierter
 > LowerCaseFilter > StopFilter > GermanStemFilter                          Index

  27.01.2013   6   OOP 2013 Kai Spichale
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
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
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   Änderungen




27.01.2013   9   OOP 2013 Kai Spichale
NoSQL und Datensuche


Was bieten diese Datenbanken?
►   MongoDB
►   Neo4j
►   Apache Cassandra
►   Apache Hadoop




27.01.2013   10   OOP 2013 Kai Spichale
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
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
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             Solr




27.01.2013       13   OOP 2013 Kai Spichale
MongoDB

MongoDB                                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
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
Neo4j

►   Traversierung:
    > Tiefensuche, Breitensuche
    > Gremlin, Cypher



       START person=node:peoplesearch(name=‘John’)
       MATCH person<-[:friends]->afriend RETURN afriend


    Ergebnis = George




27.01.2013   16   OOP 2013 Kai Spichale
Neo4j

►   Ganze Datenbank ist natürlicher Index bestehend aus Knoten oder Beziehungen
    > Beispiele: „name“, „city“


    personRepository.findByPropertyValue("name", "John");


►   Auto-Indexing verfolgt alle Property-Änderungen




27.01.2013   17   OOP 2013 Kai Spichale
Neo4j

    ►   Unterstützt Lucene-basierte Volltextindizes


@NodeEntity
class 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
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
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-Integration




27.01.2013   20   OOP 2013 Kai Spichale
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            Shard

27.01.2013   21   OOP 2013 Kai Spichale
Apache Hadoop




►   Open Source Projekt zur Verarbeitung von großen Datenmengen (BigData) im
    Computercluster
►   Skalierbar, ausfallsicher
►   Umfangreiches Hadoop Ökosystem
►   Hadoop Distributed File System, Hadoop MapReduce




27.01.2013   22   OOP 2013 Kai Spichale
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 Daten



27.01.2013   23   OOP 2013 Kai Spichale
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
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 Join




27.01.2013   25   OOP 2013 Kai Spichale
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, 5




27.01.2013   26    OOP 2013 Kai Spichale
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
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();
                       3
3: text                                                     doc.addField("id", fileName +
                       4
4: 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
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
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
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
                                                                               Index




27.01.2013   31    OOP 2013 Kai Spichale
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 RDBMS
Flume         Crawler        DistCp       Sqoop



                                                  Tika

                                            MapReduce
                     HDFS                      Job

                                                                   Solr Lucene        Lucene
                                                                                       Index




27.01.2013   32   OOP 2013 Kai Spichale
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        Visualisierung




27.01.2013   33     OOP 2013 Kai Spichale
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 Datenbank




27.01.2013   34   OOP 2013 Kai Spichale

Más contenido relacionado

Destacado

Güte in Aktion - Do Good
Güte in Aktion - Do GoodGüte in Aktion - Do Good
Güte in Aktion - Do GoodFreekidstories
 
Augmented Reality im mobilen Social Web
Augmented Reality im mobilen Social WebAugmented Reality im mobilen Social Web
Augmented Reality im mobilen Social WebChristoph Hess
 
HTML5 Storage
HTML5 StorageHTML5 Storage
HTML5 Storageadesso AG
 
#BSVDUS Access to Capital Part I - David Jetel
#BSVDUS  Access to Capital Part I - David Jetel #BSVDUS  Access to Capital Part I - David Jetel
#BSVDUS Access to Capital Part I - David Jetel StartupDorf e.V.
 
FMK2014: FileMaker Module by Karsten Risseeuw
FMK2014: FileMaker Module by Karsten RisseeuwFMK2014: FileMaker Module by Karsten Risseeuw
FMK2014: FileMaker Module by Karsten RisseeuwVerein FM Konferenz
 
Das kleine buch der Neujahr - A Children's Book about New Year
Das kleine buch der Neujahr - A Children's Book about New YearDas kleine buch der Neujahr - A Children's Book about New Year
Das kleine buch der Neujahr - A Children's Book about New YearFreekidstories
 
FM2014: Einführung in Function Scripting by Thomas Hirt
FM2014: Einführung in Function Scripting by Thomas HirtFM2014: Einführung in Function Scripting by Thomas Hirt
FM2014: Einführung in Function Scripting by Thomas HirtVerein FM Konferenz
 
10 Tipps für erfolgreiche PR-Bilder
10 Tipps für erfolgreiche PR-Bilder10 Tipps für erfolgreiche PR-Bilder
10 Tipps für erfolgreiche PR-BilderFaktenkontor
 
Final-Präsentation GERMAN RACING Concept Challenge 2013 – 2. Platz "Blumento...
 Final-Präsentation GERMAN RACING Concept Challenge 2013 – 2. Platz "Blumento... Final-Präsentation GERMAN RACING Concept Challenge 2013 – 2. Platz "Blumento...
Final-Präsentation GERMAN RACING Concept Challenge 2013 – 2. Platz "Blumento...GERMAN RACING Concept Challenge
 
Catalogo Brindes 2014 - Brinde para Você
Catalogo Brindes 2014 - Brinde para VocêCatalogo Brindes 2014 - Brinde para Você
Catalogo Brindes 2014 - Brinde para VocêFelipe Fejao
 

Destacado (15)

Güte in Aktion - Do Good
Güte in Aktion - Do GoodGüte in Aktion - Do Good
Güte in Aktion - Do Good
 
Augmented Reality im mobilen Social Web
Augmented Reality im mobilen Social WebAugmented Reality im mobilen Social Web
Augmented Reality im mobilen Social Web
 
Schiele
SchieleSchiele
Schiele
 
HTML5 Storage
HTML5 StorageHTML5 Storage
HTML5 Storage
 
10 gebote
10 gebote10 gebote
10 gebote
 
Grécia
GréciaGrécia
Grécia
 
#BSVDUS Access to Capital Part I - David Jetel
#BSVDUS  Access to Capital Part I - David Jetel #BSVDUS  Access to Capital Part I - David Jetel
#BSVDUS Access to Capital Part I - David Jetel
 
FMK2014: FileMaker Module by Karsten Risseeuw
FMK2014: FileMaker Module by Karsten RisseeuwFMK2014: FileMaker Module by Karsten Risseeuw
FMK2014: FileMaker Module by Karsten Risseeuw
 
Das kleine buch der Neujahr - A Children's Book about New Year
Das kleine buch der Neujahr - A Children's Book about New YearDas kleine buch der Neujahr - A Children's Book about New Year
Das kleine buch der Neujahr - A Children's Book about New Year
 
Psalmen 91 - Psalm 91
Psalmen 91 - Psalm 91Psalmen 91 - Psalm 91
Psalmen 91 - Psalm 91
 
FM2014: Einführung in Function Scripting by Thomas Hirt
FM2014: Einführung in Function Scripting by Thomas HirtFM2014: Einführung in Function Scripting by Thomas Hirt
FM2014: Einführung in Function Scripting by Thomas Hirt
 
GWT
GWTGWT
GWT
 
10 Tipps für erfolgreiche PR-Bilder
10 Tipps für erfolgreiche PR-Bilder10 Tipps für erfolgreiche PR-Bilder
10 Tipps für erfolgreiche PR-Bilder
 
Final-Präsentation GERMAN RACING Concept Challenge 2013 – 2. Platz "Blumento...
 Final-Präsentation GERMAN RACING Concept Challenge 2013 – 2. Platz "Blumento... Final-Präsentation GERMAN RACING Concept Challenge 2013 – 2. Platz "Blumento...
Final-Präsentation GERMAN RACING Concept Challenge 2013 – 2. Platz "Blumento...
 
Catalogo Brindes 2014 - Brinde para Você
Catalogo Brindes 2014 - Brinde para VocêCatalogo Brindes 2014 - Brinde para Você
Catalogo Brindes 2014 - Brinde para Você
 

Más de adesso AG

SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)adesso AG
 
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMPSNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMPadesso AG
 
Mythos High Performance Teams
Mythos High Performance TeamsMythos High Performance Teams
Mythos High Performance Teamsadesso AG
 
A Business-Critical SharePoint Solution From adesso AG
A Business-CriticalSharePoint SolutionFrom adesso AGA Business-CriticalSharePoint SolutionFrom adesso AG
A Business-Critical SharePoint Solution From adesso AGadesso AG
 
Was Sie über NoSQL Datenbanken wissen sollten!
Was Sie über NoSQL Datenbanken wissen sollten!Was Sie über NoSQL Datenbanken wissen sollten!
Was Sie über NoSQL Datenbanken wissen sollten!adesso AG
 
Continuous Delivery praktisch
Continuous Delivery praktischContinuous Delivery praktisch
Continuous Delivery praktischadesso AG
 
Agilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous DeliveryAgilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous Deliveryadesso AG
 
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?adesso AG
 
Getriebene Anwendungslandschaften
Getriebene AnwendungslandschaftenGetriebene Anwendungslandschaften
Getriebene Anwendungslandschaftenadesso AG
 
Google App Engine JAX PaaS Parade 2013
Google App Engine JAX PaaS Parade 2013Google App Engine JAX PaaS Parade 2013
Google App Engine JAX PaaS Parade 2013adesso AG
 
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)adesso AG
 
NoSQL in der Cloud - Why?
NoSQL in der Cloud -  Why?NoSQL in der Cloud -  Why?
NoSQL in der Cloud - Why?adesso AG
 
Lean web architecture mit jsf 2.0, cdi & co.
Lean web architecture mit jsf 2.0, cdi & co.Lean web architecture mit jsf 2.0, cdi & co.
Lean web architecture mit jsf 2.0, cdi & co.adesso AG
 
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDIadesso AG
 
Zehn Hinweise für Architekten
Zehn Hinweise für ArchitektenZehn Hinweise für Architekten
Zehn Hinweise für Architektenadesso AG
 
Agile Praktiken
Agile PraktikenAgile Praktiken
Agile Praktikenadesso AG
 
Java und Cloud - nicht nur mit PaaS
Java und Cloud - nicht nur mit PaaS Java und Cloud - nicht nur mit PaaS
Java und Cloud - nicht nur mit PaaS adesso AG
 
Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5adesso AG
 
CloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App EngineCloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App Engineadesso AG
 
Scala 4 Enterprise
Scala 4 EnterpriseScala 4 Enterprise
Scala 4 Enterpriseadesso AG
 

Más de adesso AG (20)

SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP (Kurzversion)
 
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMPSNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
SNMP Applied - Sicheres Anwendungs-Monitoring mit SNMP
 
Mythos High Performance Teams
Mythos High Performance TeamsMythos High Performance Teams
Mythos High Performance Teams
 
A Business-Critical SharePoint Solution From adesso AG
A Business-CriticalSharePoint SolutionFrom adesso AGA Business-CriticalSharePoint SolutionFrom adesso AG
A Business-Critical SharePoint Solution From adesso AG
 
Was Sie über NoSQL Datenbanken wissen sollten!
Was Sie über NoSQL Datenbanken wissen sollten!Was Sie über NoSQL Datenbanken wissen sollten!
Was Sie über NoSQL Datenbanken wissen sollten!
 
Continuous Delivery praktisch
Continuous Delivery praktischContinuous Delivery praktisch
Continuous Delivery praktisch
 
Agilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous DeliveryAgilität, Snapshots und Continuous Delivery
Agilität, Snapshots und Continuous Delivery
 
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
Wozu Portlets – reichen HTML5 und Rest nicht aus für moderne Portale?
 
Getriebene Anwendungslandschaften
Getriebene AnwendungslandschaftenGetriebene Anwendungslandschaften
Getriebene Anwendungslandschaften
 
Google App Engine JAX PaaS Parade 2013
Google App Engine JAX PaaS Parade 2013Google App Engine JAX PaaS Parade 2013
Google App Engine JAX PaaS Parade 2013
 
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
Wartbare Web-Anwendungen mit Knockout.js und Model-View-ViewModel (MVVM)
 
NoSQL in der Cloud - Why?
NoSQL in der Cloud -  Why?NoSQL in der Cloud -  Why?
NoSQL in der Cloud - Why?
 
Lean web architecture mit jsf 2.0, cdi & co.
Lean web architecture mit jsf 2.0, cdi & co.Lean web architecture mit jsf 2.0, cdi & co.
Lean web architecture mit jsf 2.0, cdi & co.
 
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDISchlanke Webarchitekturen nicht nur mit JSF 2 und CDI
Schlanke Webarchitekturen nicht nur mit JSF 2 und CDI
 
Zehn Hinweise für Architekten
Zehn Hinweise für ArchitektenZehn Hinweise für Architekten
Zehn Hinweise für Architekten
 
Agile Praktiken
Agile PraktikenAgile Praktiken
Agile Praktiken
 
Java und Cloud - nicht nur mit PaaS
Java und Cloud - nicht nur mit PaaS Java und Cloud - nicht nur mit PaaS
Java und Cloud - nicht nur mit PaaS
 
Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5Neue EBusiness Perspektiven durch HTML5
Neue EBusiness Perspektiven durch HTML5
 
CloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App EngineCloudConf2011 Introduction to Google App Engine
CloudConf2011 Introduction to Google App Engine
 
Scala 4 Enterprise
Scala 4 EnterpriseScala 4 Enterprise
Scala 4 Enterprise
 

OOP 2013 NoSQL Suche

  • 1. Datensuche mit NoSQL Kai Spichale 27.01.2013
  • 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 DAK 27.01.2013 1 OOP 2013 Kai Spichale
  • 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 unpraktisch 27.01.2013 2 OOP 2013 Kai Spichale
  • 4. Agenda ► Lucene Volltextsuchen ► NoSQL: > Architekturtreiber > MongoDB > Neo4j > Apache Cassandra > Apache Hadoop ► Schlussbemerkung 27.01.2013 3 OOP 2013 Kai Spichale
  • 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 zugeordnet 27.01.2013 4 OOP 2013 Kai Spichale
  • 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 Update 27.01.2013 5 OOP 2013 Kai Spichale
  • 7. Textanalyse Extrahieren, Parsen Dokumente 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 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 Änderungen 27.01.2013 9 OOP 2013 Kai Spichale
  • 11. NoSQL und Datensuche Was bieten diese Datenbanken? ► MongoDB ► Neo4j ► Apache Cassandra ► Apache Hadoop 27.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 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. 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 Solr 27.01.2013 13 OOP 2013 Kai Spichale
  • 15. MongoDB MongoDB 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. 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. Neo4j ► Traversierung: > Tiefensuche, Breitensuche > Gremlin, Cypher START person=node:peoplesearch(name=‘John’) MATCH person<-[:friends]->afriend RETURN afriend Ergebnis = George 27.01.2013 16 OOP 2013 Kai Spichale
  • 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-Änderungen 27.01.2013 17 OOP 2013 Kai Spichale
  • 19. Neo4j ► Unterstützt Lucene-basierte Volltextindizes @NodeEntity class 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. 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. 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-Integration 27.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 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 Shard 27.01.2013 21 OOP 2013 Kai Spichale
  • 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 MapReduce 27.01.2013 22 OOP 2013 Kai Spichale
  • 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 Daten 27.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 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 Join 27.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, 5 27.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<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(); 3 3: text doc.addField("id", fileName + 4 4: 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 für große 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 großen Datenmengen Applikationen ► Streaming-Techniken ► Fehlertolerant Flume Tika MapReduce HDFS Job Solr Lucene Lucene Index 27.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 RDBMS Flume Crawler DistCp Sqoop Tika MapReduce HDFS Job Solr Lucene Lucene Index 27.01.2013 32 OOP 2013 Kai Spichale
  • 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 Visualisierung 27.01.2013 33 OOP 2013 Kai Spichale
  • 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 Datenbank 27.01.2013 34 OOP 2013 Kai Spichale