SlideShare a Scribd company logo
Padova, InfoCamere
  JBoss User Group
     12 Aprile 2012
Chi sono?
•   Team Hibernate    Sanne Grinovero
– Hibernate Search    Italiano, Olandese, Newcastle
                      Red Hat: JBoss, Engineering
– Hibernate OGM

•   Infinispan
– Infinispan Core
– Infinispan Query
– JGroups

•   Apache Lucene
Infinispan
•   Cache distribuita
•   Datagrid scalabile e transazionale:
    performance estreme e cloud
•   NoSQL “DataBase”: key-value store
– Come si interroga un data grid ?

      SELECT * FROM GRID
Interrogare
una “Grid”

Object v =

cache.get(“c7”);
Senza chiave, non puoi
ottenere il valore.
É pratico il solo
accesso per chiave?
Test sulla mia
   libreria
• Dov'é Hibernate
    Search in Action?
•   Mi passi
    ISBN 978-1-
    933988-17-7 ?
•   Prendi i libri su
    Gaudí ?
Come implementare
    queste funzioni su un
      Key/Value store?
•   Dov'é Hibernate Search in Action?
•   Mi passi ISBN 978-1-933988-17-7 ?
•   Trovi i libri su Gaudí ?
document based NoSQL:
        Map/Reduce
Infinispan non é propriamente document based ma
offre Map/Reduce.
Eppure non é escluso l'uso di JSON, XML, YAML, Java:
     public class Book implements Serializable {

         final String title;
         final String author;
         final String editor;

         public Book(String title, String author, String editor) {
            this.title = title;
            this.author = author;
            this.editor = editor;
         }

     }
Iterate & collect
class TitleBookSearcher implements
                        Mapper<String, Book, String, Book> {
  final String title;
  public TitleBookSearcher(String t) { title = t; }
  public void map(String key, Book value, Collector collector){
     if ( title.equals( value.title ) )
        collector.emit( key, value );
  }

class BookReducer implements
                        Reducer<String, Book> {
  public Book reduce(String reducedKey, Iterator<Book> iter) {
         return iter.next();
  }
}
Implementare queste
         semplici funzioni:
✔ Trova “Hibernate Search in Action”?
✔ Trova per codice “ISBN 978-1-933988-17-7” ?
✗ Quanti libri a proposito di
“Shakespeare” ?
  •   Per uno score corretto in ricerche fulltext
      servono le frequenze dei frammenti di
      testo relative al corpus.
  •   Il Pre-tagging é poco pratico e limitante
Apache Lucene
•   Progetto open source Apache™

•   Integrato in innumerevoli progetti

•   .. tra cui Hibernate via Hibernate Search

•   Clusterizzabile via Infinispan
– Performance
– Real time
– High availability
Cosa offre Lucene?
•   Ricerche per Similarity score

•   Analisi del testo
– Sinonyms, Stopwords, Stemming, ...

•   Reusable declarative Filters

•   TermVectors

•   MoreLikeThis

•   Faceted Search

•   Veloce!
Lucene: Stopwords
a, able, about, across, after, all, almost, also, am,
among, an, and, any, are, as, at, be, because, been,
but, by, can, cannot, could, dear, did, do, does,
either, else, ever, every, for, from, get, got, had,
has, have, he, her, hers, him, his, how, however, i, if,
in, into, is, it, its, just, least, let, like, likely,
may, me, might, most, must, my, neither, no, nor, not,
of, off, often, on, only, or, other, our, own, rather,
said, say, says, she, should, since, so, some, than,
that, the, their, them, then, there, these, they, this,
tis, to, too, twas, us, wants, was, we, were, what,
when, where, which, while, who, whom, why, will, with,
would, yet, you, your
Filters
Faceted Search
Facciamo un bel motore di
ricerca che restituisce i
risultati in ordine
alfabetico?
Chi usa Lucene?




Nexus
Dov'é la fregatura?
•   Necessita di un indice: risorse fisiche e di
    amministrazione.
– in memory
– on filesystem
– in Infinispan

•   Sostanzialmente immutable segments
– Ottimizzato per data mining / query, non per
  updates.

•   Un mondo di stringhe e vettori di frequenze
Infinispan Query quickstart
  • Abilita indexing=true nella
       configurazione
   •   Aggiungi il modulo infinispan-
       query.jar al classpath
   •   Annota i POJO inseriti nella cache
       per le modalitá di indicizzazione
 <dependency>
     <groupId>org.infinispan</groupId>
     <artifactId>infinispan-query</artifactId>
     <version>5.1.3.FINAL</version>
 </dependency>
Configurazione tramite
          codice
Configuration c = new Configuration()
   .fluent()
      .indexing()
      .addProperty(
"hibernate.search.default.directory_provider",
"ram")
      .build();

CacheManager manager = new DefaultCacheManager(c);
Configurazione / XML
<?xml version="1.0" encoding="UTF-8"?>
<infinispan
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="urn:infinispan:config:5.0
http://www.infinispan.org/schemas/infinispan-config-5.0.xsd"
            xmlns="urn:infinispan:config:5.0">
<default>
    <indexing enabled="true" indexLocalOnly="true">
        <properties>
             <property name="hibernate.search.option1" value="..." />
             <property name="hibernate.search.option2" value="..." />
          </properties>
    </indexing>
</default>
Annotazioni sul modello
@ProvidedId @Indexed
public class Book implements Serializable {

    @Field String title;
    @Field String author;
    @Field String editor;

    public Book(String title, String author, String editor) {
       this.title = title;
       this.author = author;
       this.editor = editor;
    }

}
Esecuzione di Query
SearchManager sm = Search.getSearchManager(cache);

Query query = sm.buildQueryBuilderForClass(Book.class)
    .get()
        .phrase()
            .onField("title")
            .sentence("in action")
    .createQuery();

List<Object> list = sm.getQuery(query).list();
Architettura
•    Integra Hibernate Search (engine)
– Listener a eventi Hibernate &
  transazioni
    • Eventi Infinispan & transazioni
– Mappa tipi Java e grafi del modello a
  Documents di Lucene
– Thin-layer design
Index mapping
Tests per
     Infinispan Query
https://github.com/infinispan/infinispan
org.apache.lucene.search.Query luceneQuery =
    queryBuilder.phrase()
          .onField( "description" )
          .andField( "title" )
          .sentence( "a book on highly scalable query engines" )
          .enableFullTextFilter( “ready-for-shipping” )
          .createQuery();


CacheQuery cacheQuery =
            searchManager.getQuery( luceneQuery, Book.class);
List<Book> objectList = cacheQuery.list();
Architettura: Infinispan
         Query
Problemi di scalabilitá
•   Writer locks globali
•   Sharing su NFS
    molto problematico
Queue-based clustering
     (filesystem)
Index stored in
   Infinispan
Quickstart Hibernate
           Search
 •    Aggiungi la dipendenza ad hibernate-
      search:
<dependency>
   <groupId>org.hibernate</groupId>
   <artifactId>hibernate­search­orm</artifactId>
   <version>4.1.0.Final</version>
</dependency>
Quickstart Hibernate
                       Search
•    Tutto il resto é opzionale:
– Come gestire gli indici
– Moduli di estensione, Analyzer custom
– Performance tuning
– Mapping custom dei tipi
– Clustering
    • JGroups
    • Infinispan
    • JMS
Quickstart Hibernate
@Entity
          Search
public class Essay {
   @Id
   public Long getId() { return id; }

   public String getSummary() { return 
summary; }
   @Lob 
   public String getText() { return text; }
   @ManyToOne 
   public Author getAuthor() { return 
author; }
...
Quickstart Hibernate
@Entity @Indexed
                 Search
public class Essay {
   @Id
   public Long getId() { return id; }

   public String getSummary() { return 
summary; }
   @Lob 
   public String getText() { return text; }
   @ManyToOne 
   public Author getAuthor() { return 
author; }
...
Quickstart Hibernate
@Entity @Indexed
                 Search
public class Essay {
   @Id
   public Long getId() { return id; }
   @Field
   public String getSummary() { return 
summary; }
   @Lob 
   public String getText() { return text; }
   @ManyToOne 
   public Author getAuthor() { return 
author; }
...
Quickstart Hibernate
@Entity @Indexed
                 Search
public class Essay {
   @Id
   public Long getId() { return id; }
   @Field
   public String getSummary() { return 
summary; }
   @Lob @Field @Boost(0.8)
   public String getText() { return text; }
   @ManyToOne 
   public Author getAuthor() { return 
author; }
...
Quickstart Hibernate
@Entity @Indexed
                 Search
public class Essay {
   @Id
   public Long getId() { return id; }
   @Field
   public String getSummary() { return 
summary; }
   @Lob @Field @Boost(0.8)
   public String getText() { return text; }
   @ManyToOne @IndexedEmbedded 
   public Author getAuthor() { return 
author; }
...
Un secondo esempio
@Entity                        @Entity
public class Author {          public class Book {
        @Id @GeneratedValue       private Integer id;
        private Integer id;       private String title;
        private String name;   }
        @OneToMany
        private Set<Book>
books;
}
Struttura dell'indice
@Entity @Indexed              @Entity
public class Author {         public class Book {
        @Id @GeneratedValue      private Integer id;
        private Integer id;      @Field(store=Store.YES)
                                 private String title;
@Field(store=Store.YES)       }
       private String name;
       @OneToMany
       @IndexedEmbedded
       private Set<Book>
books;
}
Query
String[] productFields = {"summary", "author.name"};

Query luceneQuery = // query builder or any Lucene 
Query

FullTextEntityManager ftEm =
   Search.getFullTextEntityManager(entityManager);

FullTextQuery query =
   ftEm.createFullTextQuery( luceneQuery, 
Product.class );

List<Product> items =
   query.setMaxResults(100).getResultList();

int totalNbrOfResults = query.getResultSize();
                             TotalNbrOfResults= 8.320.000
                             (0.002 seconds)
Uso della DSL
Sui risultati:
•   Managed POJO: modifiche alle entitá applicati sia a
    Lucene che al database

•   Paginazione JPA, familiari (standard):
– .setMaxResults( 20 ).setFirstResult( 100 );

•   Restrizioni sul tipo, query fulltext polimorifiche:
– .createQuery( luceneQuery, A.class, B.class, ..);

•   Projection

•   Result mapping
Filters
FullTextQuery ftQuery = s // s is a FullTextSession

   .createFullTextQuery( query, Product.class )

   .enableFullTextFilter( "filtroMinori" )

   .enableFullTextFilter( "offertaDelGiorno" )

      .setParameter( "day", “20120412” )

   .enableFullTextFilter( "inStockA" )

      .setParameter( "location", "Padova" );

List<Product> results = ftQuery.list();
Uso di Infinispan per la
distribuzione degli indici
Clustering di un uso
      Lucene “diretto”

•   Usando org.apache.lucene
– Tradizionalmente difficile da distribuire
  su nodi multipli
– Su qualsiasi cloud
Nodo singolo
         idea di performance
                       Write ops/sec                                                                              Queries/sec



 RAMDirectory                                                                               RAMDirectory



    Infinispan 0                                                                               Infinispan 0




                                                                      queries per second
  Infinispan D4                                                                              Infinispan D4



 Infinispan D40                                                                             Infinispan D40



   FSDirectory                                                                                FSDirectory



Infinispan Local                                                                           Infinispan Local


                   0   50   100   150   200   250   300   350   400                                           0   5000   10000   15000   20000   25000
Nodi multipli
         idea di performance
                       Write ops/sec                                                                              Queries/sec



 RAMDirectory                                                                               RAMDirectory



    Infinispan 0                                                                               Infinispan 0




                                                                      queries per second
  Infinispan D4                                                                              Infinispan D4



 Infinispan D40                                                                             Infinispan D40



   FSDirectory                                                                                FSDirectory



Infinispan Local                                                                           Infinispan Local


                   0   50   100   150   200   250   300   350   400                                           0   5000   10000   15000   20000   25000
Le scritture non
    scalano?
Suggerimenti per
    performance ottimali
•   Calibra il chunk_size per l'uso effettivo
    del vostro indice (evita i read lock
    evitando la frammentazione)
•   Verifica la dimensione dei pacchetti
    network: blob size, JGroups packets,
    network interface and hardware.
•   Scegli e configura un CacheLoader
    adatto
Requisiti di memoria
•   RAMDirectory: tutto l'indice (e piú) in RAM.

•   FSDirectory: un buon OS sa fare un ottimo
    lavoro di caching di IO – spesso meglio di
    RAMDirectory.

•   Infinispan: configurabile, fino alla memoria
    condivisa tra nodi
– Flexible
– Fast
– Network vs. disk
Moduli per cloud
 deployment scalabili
   One Infinispan to rule them all
– Store Lucene indexes
– Hibernate second level cache
– Application managed cache
– Datagrid
– EJB, session replication in AS7
– As a JPA “store” via Hibernate OGM
Ingredienti per la cloud
• JGroups DISCOVERY protocol
– MPING
– TCP_PING
– JDBC_PING
– S3_PING

•   Scegli un CacheLoader
– Database based, Jclouds,
  Cassandra, ...
Futuro prossimo
•   Semplificare la scalabilitá in scrittura
•   Auto-tuning dei parametri di
    clustering – ergonomics!

•   Parallel searching: multi/core +
    multi/node

•   A component of
– http://www.cloudtm.eu
JPA for NoSQL
NoSQL:
   la flessibilitá costa
• Programming model
  • one per product :-(
• no schema => app driven schema
• query (Map Reduce, specific DSL, ...)
• data structure transpires
• Transaction
• durability / consistency
Esempio: Infinispan
Distributed Key/Value store
         (or Replicated, local only efficient cache,
      •
      invalidating cache)
Each node is equal
         Just start more nodes, or kill some
      •
No bottlenecks
         by design
      •
Cloud-network friendly
         JGroups
      •
         And “cloud storage” friendly too!
      •
ABC di Infinispan

map.put( “user-34”,
userInstance );

map.get( “user-34” );

map.remove( “user-34” );
É una ConcurrentMap !
map.put( “user-34”, userInstance );

map.get( “user-34” );

map.remove( “user-34” );

map.putIfAbsent( “user-38”,
another );
Qualche altro dettaglio su
       Infinispan
 ●   Support for Transactions (XA)
 ●   CacheLoaders
     ●   Cassandra, JDBC, Amazon S3 (jclouds),...
 ● Tree API for JBossCache compatibility
 ● Lucene integration

   ● Two-fold

 ● Some Hibernate integrations

   ● Second level cache

   ● Hibernate Search indexing backend
Obiettivi di Hibernate
         OGM

      Encourage new data usage patterns
  •
      Familiar environment
  •
      Ease of use
  •
      easy to jump in
  •
      easy to jump out
  •
      Push NoSQL exploration in enterprises
  •
      “PaaS for existing API” initiative
  •
Cos'é

• JPA front end to key/value stores
   • Object CRUD (incl polymorphism and
      associations)
   • OO queries (JP-QL)
• Reuses
   • Hibernate Core
   • Hibernate Search (and Lucene)
   • Infinispan
• Is not a silver bullet
   • not for all NoSQL use cases
Entitá come blob
       serializzati?
• Serialize objects into the (key) value
  • store the whole graph?

• maintain consistency with duplicated
  objects
  • guaranteed identity a == b
  • concurrency / latency
  • structure change and (de)serialization,
     class definition changes
OGM’s approach to
      schema
• Keep what’s best from relational model
  • as much as possible
  • tables / columns / pks
• Decorrelate object structure from data
  structure
• Data stored as (self-described) tuples
• Core types limited
  • portability
Query

• Hibernate Search indexes entities
• Store Lucene indexes in Infinispan
• JP-QL to Lucene query transformation

• Works for simple queries
  • Lucene is not a relational SQL engine
E ora?


•   MongoDB
•   EHCache / Terracotta
•   Redis
•   Voldemort
•   Neo4J
•   Dynamo
•   ... Git? Spreadsheet? ...CapeDwarf?
Q&A



http://infinispan.org   @Infinispan
http://in.relation.to   @Hibernate
http://jboss.org        @SanneGrinovero

More Related Content

What's hot

Building node.js applications with Database Jones
Building node.js applications with Database JonesBuilding node.js applications with Database Jones
Building node.js applications with Database Jones
John David Duncan
 
Cloudera Impala, updated for v1.0
Cloudera Impala, updated for v1.0Cloudera Impala, updated for v1.0
Cloudera Impala, updated for v1.0
Scott Leberknight
 
My sql tutorial-oscon-2012
My sql tutorial-oscon-2012My sql tutorial-oscon-2012
My sql tutorial-oscon-2012
John David Duncan
 
Designing a JavaFX Mobile application
Designing a JavaFX Mobile applicationDesigning a JavaFX Mobile application
Designing a JavaFX Mobile application
Fabrizio Giudici
 
Building .NET Apps using Couchbase Lite
Building .NET Apps using Couchbase LiteBuilding .NET Apps using Couchbase Lite
Building .NET Apps using Couchbase Lite
gramana
 
JCR and ModeShape
JCR and ModeShapeJCR and ModeShape
JCR and ModeShape
Jozef Chocholacek
 
ElasticSearch for .NET Developers
ElasticSearch for .NET DevelopersElasticSearch for .NET Developers
ElasticSearch for .NET Developers
Ben van Mol
 
Oak Lucene Indexes
Oak Lucene IndexesOak Lucene Indexes
Oak Lucene Indexes
Chetan Mehrotra
 
Omnisearch in AEM 6.2 - Search All the Things
Omnisearch in AEM 6.2 - Search All the ThingsOmnisearch in AEM 6.2 - Search All the Things
Omnisearch in AEM 6.2 - Search All the Things
Justin Edelson
 
Scalable XQuery Processing with Zorba on top of MongoDB
Scalable XQuery Processing with Zorba on top of MongoDBScalable XQuery Processing with Zorba on top of MongoDB
Scalable XQuery Processing with Zorba on top of MongoDB
William Candillon
 
Getting started with Elasticsearch and .NET
Getting started with Elasticsearch and .NETGetting started with Elasticsearch and .NET
Getting started with Elasticsearch and .NET
Tomas Jansson
 
Dropwizard
DropwizardDropwizard
Dropwizard
Scott Leberknight
 
Cassandra and materialized views
Cassandra and materialized viewsCassandra and materialized views
Cassandra and materialized views
Grzegorz Duda
 
Pragmatische Plone Projekte
Pragmatische Plone ProjektePragmatische Plone Projekte
Pragmatische Plone Projekte
Andreas Jung
 
MongoDB Munich 2012: MongoDB for official documents in Bavaria
MongoDB Munich 2012: MongoDB for official documents in BavariaMongoDB Munich 2012: MongoDB for official documents in Bavaria
MongoDB Munich 2012: MongoDB for official documents in Bavaria
MongoDB
 
Replacing Oracle with MongoDB for a templating application at the Bavarian go...
Replacing Oracle with MongoDB for a templating application at the Bavarian go...Replacing Oracle with MongoDB for a templating application at the Bavarian go...
Replacing Oracle with MongoDB for a templating application at the Bavarian go...
Comsysto Reply GmbH
 
Ms build – inline task
Ms build – inline taskMs build – inline task
Ms build – inline task
LearningTech
 
Cooking 5 Star Infrastructure with Chef
Cooking 5 Star Infrastructure with ChefCooking 5 Star Infrastructure with Chef
Cooking 5 Star Infrastructure with Chef
G. Ryan Fawcett
 
Polyglot Persistence
Polyglot PersistencePolyglot Persistence
Polyglot Persistence
Scott Leberknight
 
PostgreSQL, your NoSQL database
PostgreSQL, your NoSQL databasePostgreSQL, your NoSQL database
PostgreSQL, your NoSQL database
Reuven Lerner
 

What's hot (20)

Building node.js applications with Database Jones
Building node.js applications with Database JonesBuilding node.js applications with Database Jones
Building node.js applications with Database Jones
 
Cloudera Impala, updated for v1.0
Cloudera Impala, updated for v1.0Cloudera Impala, updated for v1.0
Cloudera Impala, updated for v1.0
 
My sql tutorial-oscon-2012
My sql tutorial-oscon-2012My sql tutorial-oscon-2012
My sql tutorial-oscon-2012
 
Designing a JavaFX Mobile application
Designing a JavaFX Mobile applicationDesigning a JavaFX Mobile application
Designing a JavaFX Mobile application
 
Building .NET Apps using Couchbase Lite
Building .NET Apps using Couchbase LiteBuilding .NET Apps using Couchbase Lite
Building .NET Apps using Couchbase Lite
 
JCR and ModeShape
JCR and ModeShapeJCR and ModeShape
JCR and ModeShape
 
ElasticSearch for .NET Developers
ElasticSearch for .NET DevelopersElasticSearch for .NET Developers
ElasticSearch for .NET Developers
 
Oak Lucene Indexes
Oak Lucene IndexesOak Lucene Indexes
Oak Lucene Indexes
 
Omnisearch in AEM 6.2 - Search All the Things
Omnisearch in AEM 6.2 - Search All the ThingsOmnisearch in AEM 6.2 - Search All the Things
Omnisearch in AEM 6.2 - Search All the Things
 
Scalable XQuery Processing with Zorba on top of MongoDB
Scalable XQuery Processing with Zorba on top of MongoDBScalable XQuery Processing with Zorba on top of MongoDB
Scalable XQuery Processing with Zorba on top of MongoDB
 
Getting started with Elasticsearch and .NET
Getting started with Elasticsearch and .NETGetting started with Elasticsearch and .NET
Getting started with Elasticsearch and .NET
 
Dropwizard
DropwizardDropwizard
Dropwizard
 
Cassandra and materialized views
Cassandra and materialized viewsCassandra and materialized views
Cassandra and materialized views
 
Pragmatische Plone Projekte
Pragmatische Plone ProjektePragmatische Plone Projekte
Pragmatische Plone Projekte
 
MongoDB Munich 2012: MongoDB for official documents in Bavaria
MongoDB Munich 2012: MongoDB for official documents in BavariaMongoDB Munich 2012: MongoDB for official documents in Bavaria
MongoDB Munich 2012: MongoDB for official documents in Bavaria
 
Replacing Oracle with MongoDB for a templating application at the Bavarian go...
Replacing Oracle with MongoDB for a templating application at the Bavarian go...Replacing Oracle with MongoDB for a templating application at the Bavarian go...
Replacing Oracle with MongoDB for a templating application at the Bavarian go...
 
Ms build – inline task
Ms build – inline taskMs build – inline task
Ms build – inline task
 
Cooking 5 Star Infrastructure with Chef
Cooking 5 Star Infrastructure with ChefCooking 5 Star Infrastructure with Chef
Cooking 5 Star Infrastructure with Chef
 
Polyglot Persistence
Polyglot PersistencePolyglot Persistence
Polyglot Persistence
 
PostgreSQL, your NoSQL database
PostgreSQL, your NoSQL databasePostgreSQL, your NoSQL database
PostgreSQL, your NoSQL database
 

Viewers also liked

Why RESTful Design for the Cloud is Best
Why RESTful Design for the Cloud is BestWhy RESTful Design for the Cloud is Best
Why RESTful Design for the Cloud is Best
Galder Zamarreño
 
Infinispan – the open source data grid platform by Mircea Markus
Infinispan – the open source data grid platform by Mircea MarkusInfinispan – the open source data grid platform by Mircea Markus
Infinispan – the open source data grid platform by Mircea Markus
Codemotion
 
What's New in Infinispan 6.0
What's New in Infinispan 6.0What's New in Infinispan 6.0
What's New in Infinispan 6.0
JBUG London
 
Infinispan
InfinispanInfinispan
Infinispan
guest69f868
 
Infinispan Data Grid Platform
Infinispan Data Grid PlatformInfinispan Data Grid Platform
Infinispan Data Grid Platform
jbugkorea
 
London JBUG April 2015 - Performance Tuning Apps with WildFly Application Server
London JBUG April 2015 - Performance Tuning Apps with WildFly Application ServerLondon JBUG April 2015 - Performance Tuning Apps with WildFly Application Server
London JBUG April 2015 - Performance Tuning Apps with WildFly Application Server
JBUG London
 
Introducing Infinispan
Introducing InfinispanIntroducing Infinispan
Introducing Infinispan
PT.JUG
 
Data Grids vs Databases
Data Grids vs DatabasesData Grids vs Databases
Data Grids vs Databases
Galder Zamarreño
 
Infinispan, a distributed in-memory key/value data grid and cache
 Infinispan, a distributed in-memory key/value data grid and cache Infinispan, a distributed in-memory key/value data grid and cache
Infinispan, a distributed in-memory key/value data grid and cache
Sebastian Andrasoni
 
Data Grids and Data Caching
Data Grids and Data CachingData Grids and Data Caching
Data Grids and Data Caching
Galder Zamarreño
 
Infinispan for Dummies
Infinispan for DummiesInfinispan for Dummies
Infinispan for Dummies
Galder Zamarreño
 

Viewers also liked (11)

Why RESTful Design for the Cloud is Best
Why RESTful Design for the Cloud is BestWhy RESTful Design for the Cloud is Best
Why RESTful Design for the Cloud is Best
 
Infinispan – the open source data grid platform by Mircea Markus
Infinispan – the open source data grid platform by Mircea MarkusInfinispan – the open source data grid platform by Mircea Markus
Infinispan – the open source data grid platform by Mircea Markus
 
What's New in Infinispan 6.0
What's New in Infinispan 6.0What's New in Infinispan 6.0
What's New in Infinispan 6.0
 
Infinispan
InfinispanInfinispan
Infinispan
 
Infinispan Data Grid Platform
Infinispan Data Grid PlatformInfinispan Data Grid Platform
Infinispan Data Grid Platform
 
London JBUG April 2015 - Performance Tuning Apps with WildFly Application Server
London JBUG April 2015 - Performance Tuning Apps with WildFly Application ServerLondon JBUG April 2015 - Performance Tuning Apps with WildFly Application Server
London JBUG April 2015 - Performance Tuning Apps with WildFly Application Server
 
Introducing Infinispan
Introducing InfinispanIntroducing Infinispan
Introducing Infinispan
 
Data Grids vs Databases
Data Grids vs DatabasesData Grids vs Databases
Data Grids vs Databases
 
Infinispan, a distributed in-memory key/value data grid and cache
 Infinispan, a distributed in-memory key/value data grid and cache Infinispan, a distributed in-memory key/value data grid and cache
Infinispan, a distributed in-memory key/value data grid and cache
 
Data Grids and Data Caching
Data Grids and Data CachingData Grids and Data Caching
Data Grids and Data Caching
 
Infinispan for Dummies
Infinispan for DummiesInfinispan for Dummies
Infinispan for Dummies
 

Similar to Infinispan,Lucene,Hibername OGM

Examiness hints and tips from the trenches
Examiness hints and tips from the trenchesExaminess hints and tips from the trenches
Examiness hints and tips from the trenches
Ismail Mayat
 
Full Text Search In PostgreSQL
Full Text Search In PostgreSQLFull Text Search In PostgreSQL
Full Text Search In PostgreSQL
Karwin Software Solutions LLC
 
JavaEdge09 : Java Indexing and Searching
JavaEdge09 : Java Indexing and SearchingJavaEdge09 : Java Indexing and Searching
JavaEdge09 : Java Indexing and Searching
Shay Sofer
 
LibreCat::Catmandu
LibreCat::CatmanduLibreCat::Catmandu
LibreCat::Catmandu
Patrick Hochstenbach
 
[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화
NAVER D2
 
[2 d1] elasticsearch 성능 최적화
[2 d1] elasticsearch 성능 최적화[2 d1] elasticsearch 성능 최적화
[2 d1] elasticsearch 성능 최적화
Henry Jeong
 
Introduction to Elasticsearch with basics of Lucene
Introduction to Elasticsearch with basics of LuceneIntroduction to Elasticsearch with basics of Lucene
Introduction to Elasticsearch with basics of Lucene
Rahul Jain
 
Search and analyze your data with elasticsearch
Search and analyze your data with elasticsearchSearch and analyze your data with elasticsearch
Search and analyze your data with elasticsearch
Anton Udovychenko
 
04 darwino concepts and utility classes
04   darwino concepts and utility classes04   darwino concepts and utility classes
04 darwino concepts and utility classes
darwinodb
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with Solr
Erik Hatcher
 
Introducing Hibernate OGM: porting JPA applications to NoSQL, Sanne Grinovero...
Introducing Hibernate OGM: porting JPA applications to NoSQL, Sanne Grinovero...Introducing Hibernate OGM: porting JPA applications to NoSQL, Sanne Grinovero...
Introducing Hibernate OGM: porting JPA applications to NoSQL, Sanne Grinovero...
OpenBlend society
 
How ElasticSearch lives in my DevOps life
How ElasticSearch lives in my DevOps lifeHow ElasticSearch lives in my DevOps life
How ElasticSearch lives in my DevOps life
琛琳 饶
 
Using ElasticSearch as a fast, flexible, and scalable solution to search occu...
Using ElasticSearch as a fast, flexible, and scalable solution to search occu...Using ElasticSearch as a fast, flexible, and scalable solution to search occu...
Using ElasticSearch as a fast, flexible, and scalable solution to search occu...
kristgen
 
Using JPA applications in the era of NoSQL: Introducing Hibernate OGM
Using JPA applications in the era of NoSQL: Introducing Hibernate OGMUsing JPA applications in the era of NoSQL: Introducing Hibernate OGM
Using JPA applications in the era of NoSQL: Introducing Hibernate OGM
PT.JUG
 
Effiziente Datenpersistierung mit JPA 2.1 und Hibernate
Effiziente Datenpersistierung mit JPA 2.1 und HibernateEffiziente Datenpersistierung mit JPA 2.1 und Hibernate
Effiziente Datenpersistierung mit JPA 2.1 und Hibernate
Thorben Janssen
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr Developers
Erik Hatcher
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr Developers
Erik Hatcher
 
Effiziente persistierung
Effiziente persistierungEffiziente persistierung
Effiziente persistierung
Thorben Janssen
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with Solr
Erik Hatcher
 
700 Tons of Code Later
700 Tons of Code Later700 Tons of Code Later
700 Tons of Code Later
Alexander Shopov
 

Similar to Infinispan,Lucene,Hibername OGM (20)

Examiness hints and tips from the trenches
Examiness hints and tips from the trenchesExaminess hints and tips from the trenches
Examiness hints and tips from the trenches
 
Full Text Search In PostgreSQL
Full Text Search In PostgreSQLFull Text Search In PostgreSQL
Full Text Search In PostgreSQL
 
JavaEdge09 : Java Indexing and Searching
JavaEdge09 : Java Indexing and SearchingJavaEdge09 : Java Indexing and Searching
JavaEdge09 : Java Indexing and Searching
 
LibreCat::Catmandu
LibreCat::CatmanduLibreCat::Catmandu
LibreCat::Catmandu
 
[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화
 
[2 d1] elasticsearch 성능 최적화
[2 d1] elasticsearch 성능 최적화[2 d1] elasticsearch 성능 최적화
[2 d1] elasticsearch 성능 최적화
 
Introduction to Elasticsearch with basics of Lucene
Introduction to Elasticsearch with basics of LuceneIntroduction to Elasticsearch with basics of Lucene
Introduction to Elasticsearch with basics of Lucene
 
Search and analyze your data with elasticsearch
Search and analyze your data with elasticsearchSearch and analyze your data with elasticsearch
Search and analyze your data with elasticsearch
 
04 darwino concepts and utility classes
04   darwino concepts and utility classes04   darwino concepts and utility classes
04 darwino concepts and utility classes
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with Solr
 
Introducing Hibernate OGM: porting JPA applications to NoSQL, Sanne Grinovero...
Introducing Hibernate OGM: porting JPA applications to NoSQL, Sanne Grinovero...Introducing Hibernate OGM: porting JPA applications to NoSQL, Sanne Grinovero...
Introducing Hibernate OGM: porting JPA applications to NoSQL, Sanne Grinovero...
 
How ElasticSearch lives in my DevOps life
How ElasticSearch lives in my DevOps lifeHow ElasticSearch lives in my DevOps life
How ElasticSearch lives in my DevOps life
 
Using ElasticSearch as a fast, flexible, and scalable solution to search occu...
Using ElasticSearch as a fast, flexible, and scalable solution to search occu...Using ElasticSearch as a fast, flexible, and scalable solution to search occu...
Using ElasticSearch as a fast, flexible, and scalable solution to search occu...
 
Using JPA applications in the era of NoSQL: Introducing Hibernate OGM
Using JPA applications in the era of NoSQL: Introducing Hibernate OGMUsing JPA applications in the era of NoSQL: Introducing Hibernate OGM
Using JPA applications in the era of NoSQL: Introducing Hibernate OGM
 
Effiziente Datenpersistierung mit JPA 2.1 und Hibernate
Effiziente Datenpersistierung mit JPA 2.1 und HibernateEffiziente Datenpersistierung mit JPA 2.1 und Hibernate
Effiziente Datenpersistierung mit JPA 2.1 und Hibernate
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr Developers
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr Developers
 
Effiziente persistierung
Effiziente persistierungEffiziente persistierung
Effiziente persistierung
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with Solr
 
700 Tons of Code Later
700 Tons of Code Later700 Tons of Code Later
700 Tons of Code Later
 

More from JBug Italy

JBoss Wise: breaking barriers to WS testing
JBoss Wise: breaking barriers to WS testingJBoss Wise: breaking barriers to WS testing
JBoss Wise: breaking barriers to WS testing
JBug Italy
 
Camel and JBoss
Camel and JBossCamel and JBoss
Camel and JBoss
JBug Italy
 
AS7 and CLI
AS7 and CLIAS7 and CLI
AS7 and CLI
JBug Italy
 
Intro jbug milano_26_set2012
Intro jbug milano_26_set2012Intro jbug milano_26_set2012
Intro jbug milano_26_set2012
JBug Italy
 
Faster & Greater Messaging System HornetQ zzz
Faster & Greater Messaging System HornetQ zzzFaster & Greater Messaging System HornetQ zzz
Faster & Greater Messaging System HornetQ zzz
JBug Italy
 
AS7
AS7AS7
JBoss BRMS - The enterprise platform for business logic
JBoss BRMS - The enterprise platform for business logicJBoss BRMS - The enterprise platform for business logic
JBoss BRMS - The enterprise platform for business logic
JBug Italy
 
JBoss AS7 Overview
JBoss AS7 OverviewJBoss AS7 Overview
JBoss AS7 Overview
JBug Italy
 
Intro JBug Milano - January 2012
Intro JBug Milano - January 2012Intro JBug Milano - January 2012
Intro JBug Milano - January 2012
JBug Italy
 
JBoss AS7 Webservices
JBoss AS7 WebservicesJBoss AS7 Webservices
JBoss AS7 Webservices
JBug Italy
 
JBoss AS7
JBoss AS7JBoss AS7
JBoss AS7
JBug Italy
 
Intro JBug Milano - September 2011
Intro JBug Milano - September 2011Intro JBug Milano - September 2011
Intro JBug Milano - September 2011
JBug Italy
 
All the cool stuff of JBoss BRMS
All the cool stuff of JBoss BRMSAll the cool stuff of JBoss BRMS
All the cool stuff of JBoss BRMS
JBug Italy
 
Infinispan and Enterprise Data Grid
Infinispan and Enterprise Data GridInfinispan and Enterprise Data Grid
Infinispan and Enterprise Data Grid
JBug Italy
 
Drools Introduction
Drools IntroductionDrools Introduction
Drools Introduction
JBug Italy
 
September 2010 - Arquillian
September 2010 - ArquillianSeptember 2010 - Arquillian
September 2010 - Arquillian
JBug Italy
 
September 2010 - Gatein
September 2010 - GateinSeptember 2010 - Gatein
September 2010 - Gatein
JBug Italy
 
May 2010 - Infinispan
May 2010 - InfinispanMay 2010 - Infinispan
May 2010 - Infinispan
JBug Italy
 
May 2010 - RestEasy
May 2010 - RestEasyMay 2010 - RestEasy
May 2010 - RestEasy
JBug Italy
 
May 2010 - Drools flow
May 2010 - Drools flowMay 2010 - Drools flow
May 2010 - Drools flow
JBug Italy
 

More from JBug Italy (20)

JBoss Wise: breaking barriers to WS testing
JBoss Wise: breaking barriers to WS testingJBoss Wise: breaking barriers to WS testing
JBoss Wise: breaking barriers to WS testing
 
Camel and JBoss
Camel and JBossCamel and JBoss
Camel and JBoss
 
AS7 and CLI
AS7 and CLIAS7 and CLI
AS7 and CLI
 
Intro jbug milano_26_set2012
Intro jbug milano_26_set2012Intro jbug milano_26_set2012
Intro jbug milano_26_set2012
 
Faster & Greater Messaging System HornetQ zzz
Faster & Greater Messaging System HornetQ zzzFaster & Greater Messaging System HornetQ zzz
Faster & Greater Messaging System HornetQ zzz
 
AS7
AS7AS7
AS7
 
JBoss BRMS - The enterprise platform for business logic
JBoss BRMS - The enterprise platform for business logicJBoss BRMS - The enterprise platform for business logic
JBoss BRMS - The enterprise platform for business logic
 
JBoss AS7 Overview
JBoss AS7 OverviewJBoss AS7 Overview
JBoss AS7 Overview
 
Intro JBug Milano - January 2012
Intro JBug Milano - January 2012Intro JBug Milano - January 2012
Intro JBug Milano - January 2012
 
JBoss AS7 Webservices
JBoss AS7 WebservicesJBoss AS7 Webservices
JBoss AS7 Webservices
 
JBoss AS7
JBoss AS7JBoss AS7
JBoss AS7
 
Intro JBug Milano - September 2011
Intro JBug Milano - September 2011Intro JBug Milano - September 2011
Intro JBug Milano - September 2011
 
All the cool stuff of JBoss BRMS
All the cool stuff of JBoss BRMSAll the cool stuff of JBoss BRMS
All the cool stuff of JBoss BRMS
 
Infinispan and Enterprise Data Grid
Infinispan and Enterprise Data GridInfinispan and Enterprise Data Grid
Infinispan and Enterprise Data Grid
 
Drools Introduction
Drools IntroductionDrools Introduction
Drools Introduction
 
September 2010 - Arquillian
September 2010 - ArquillianSeptember 2010 - Arquillian
September 2010 - Arquillian
 
September 2010 - Gatein
September 2010 - GateinSeptember 2010 - Gatein
September 2010 - Gatein
 
May 2010 - Infinispan
May 2010 - InfinispanMay 2010 - Infinispan
May 2010 - Infinispan
 
May 2010 - RestEasy
May 2010 - RestEasyMay 2010 - RestEasy
May 2010 - RestEasy
 
May 2010 - Drools flow
May 2010 - Drools flowMay 2010 - Drools flow
May 2010 - Drools flow
 

Recently uploaded

Digital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying AheadDigital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying Ahead
Wask
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
DanBrown980551
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
saastr
 
Webinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data WarehouseWebinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data Warehouse
Federico Razzoli
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing InstancesEnergy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Alpen-Adria-Universität
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
Jason Packer
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
Zilliz
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
Zilliz
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
Wouter Lemaire
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
jpupo2018
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Tosin Akinosho
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 

Recently uploaded (20)

Digital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying AheadDigital Marketing Trends in 2024 | Guide for Staying Ahead
Digital Marketing Trends in 2024 | Guide for Staying Ahead
 
5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides5th LF Energy Power Grid Model Meet-up Slides
5th LF Energy Power Grid Model Meet-up Slides
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
 
Webinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data WarehouseWebinar: Designing a schema for a Data Warehouse
Webinar: Designing a schema for a Data Warehouse
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing InstancesEnergy Efficient Video Encoding for Cloud and Edge Computing Instances
Energy Efficient Video Encoding for Cloud and Edge Computing Instances
 
Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024Columbus Data & Analytics Wednesdays - June 2024
Columbus Data & Analytics Wednesdays - June 2024
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
Fueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte WebinarFueling AI with Great Data with Airbyte Webinar
Fueling AI with Great Data with Airbyte Webinar
 
Generating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and MilvusGenerating privacy-protected synthetic data using Secludy and Milvus
Generating privacy-protected synthetic data using Secludy and Milvus
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
 
Project Management Semester Long Project - Acuity
Project Management Semester Long Project - AcuityProject Management Semester Long Project - Acuity
Project Management Semester Long Project - Acuity
 
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 

Infinispan,Lucene,Hibername OGM

  • 1. Padova, InfoCamere JBoss User Group 12 Aprile 2012
  • 2. Chi sono? • Team Hibernate Sanne Grinovero – Hibernate Search Italiano, Olandese, Newcastle Red Hat: JBoss, Engineering – Hibernate OGM • Infinispan – Infinispan Core – Infinispan Query – JGroups • Apache Lucene
  • 3. Infinispan • Cache distribuita • Datagrid scalabile e transazionale: performance estreme e cloud • NoSQL “DataBase”: key-value store – Come si interroga un data grid ? SELECT * FROM GRID
  • 4.
  • 5. Interrogare una “Grid” Object v = cache.get(“c7”);
  • 6. Senza chiave, non puoi ottenere il valore.
  • 7. É pratico il solo accesso per chiave?
  • 8. Test sulla mia libreria • Dov'é Hibernate Search in Action? • Mi passi ISBN 978-1- 933988-17-7 ? • Prendi i libri su Gaudí ?
  • 9.
  • 10.
  • 11.
  • 12. Come implementare queste funzioni su un Key/Value store? • Dov'é Hibernate Search in Action? • Mi passi ISBN 978-1-933988-17-7 ? • Trovi i libri su Gaudí ?
  • 13. document based NoSQL: Map/Reduce Infinispan non é propriamente document based ma offre Map/Reduce. Eppure non é escluso l'uso di JSON, XML, YAML, Java: public class Book implements Serializable { final String title; final String author; final String editor; public Book(String title, String author, String editor) { this.title = title; this.author = author; this.editor = editor; } }
  • 14. Iterate & collect class TitleBookSearcher implements Mapper<String, Book, String, Book> { final String title; public TitleBookSearcher(String t) { title = t; } public void map(String key, Book value, Collector collector){ if ( title.equals( value.title ) ) collector.emit( key, value ); } class BookReducer implements Reducer<String, Book> { public Book reduce(String reducedKey, Iterator<Book> iter) { return iter.next(); } }
  • 15. Implementare queste semplici funzioni: ✔ Trova “Hibernate Search in Action”? ✔ Trova per codice “ISBN 978-1-933988-17-7” ? ✗ Quanti libri a proposito di “Shakespeare” ? • Per uno score corretto in ricerche fulltext servono le frequenze dei frammenti di testo relative al corpus. • Il Pre-tagging é poco pratico e limitante
  • 16. Apache Lucene • Progetto open source Apache™ • Integrato in innumerevoli progetti • .. tra cui Hibernate via Hibernate Search • Clusterizzabile via Infinispan – Performance – Real time – High availability
  • 17. Cosa offre Lucene? • Ricerche per Similarity score • Analisi del testo – Sinonyms, Stopwords, Stemming, ... • Reusable declarative Filters • TermVectors • MoreLikeThis • Faceted Search • Veloce!
  • 18. Lucene: Stopwords a, able, about, across, after, all, almost, also, am, among, an, and, any, are, as, at, be, because, been, but, by, can, cannot, could, dear, did, do, does, either, else, ever, every, for, from, get, got, had, has, have, he, her, hers, him, his, how, however, i, if, in, into, is, it, its, just, least, let, like, likely, may, me, might, most, must, my, neither, no, nor, not, of, off, often, on, only, or, other, our, own, rather, said, say, says, she, should, since, so, some, than, that, the, their, them, then, there, these, they, this, tis, to, too, twas, us, wants, was, we, were, what, when, where, which, while, who, whom, why, will, with, would, yet, you, your
  • 21. Facciamo un bel motore di ricerca che restituisce i risultati in ordine alfabetico?
  • 23. Dov'é la fregatura? • Necessita di un indice: risorse fisiche e di amministrazione. – in memory – on filesystem – in Infinispan • Sostanzialmente immutable segments – Ottimizzato per data mining / query, non per updates. • Un mondo di stringhe e vettori di frequenze
  • 24. Infinispan Query quickstart • Abilita indexing=true nella configurazione • Aggiungi il modulo infinispan- query.jar al classpath • Annota i POJO inseriti nella cache per le modalitá di indicizzazione <dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-query</artifactId> <version>5.1.3.FINAL</version> </dependency>
  • 25. Configurazione tramite codice Configuration c = new Configuration() .fluent() .indexing() .addProperty( "hibernate.search.default.directory_provider", "ram") .build(); CacheManager manager = new DefaultCacheManager(c);
  • 26. Configurazione / XML <?xml version="1.0" encoding="UTF-8"?> <infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:config:5.0 http://www.infinispan.org/schemas/infinispan-config-5.0.xsd" xmlns="urn:infinispan:config:5.0"> <default> <indexing enabled="true" indexLocalOnly="true"> <properties> <property name="hibernate.search.option1" value="..." /> <property name="hibernate.search.option2" value="..." /> </properties> </indexing> </default>
  • 27. Annotazioni sul modello @ProvidedId @Indexed public class Book implements Serializable { @Field String title; @Field String author; @Field String editor; public Book(String title, String author, String editor) { this.title = title; this.author = author; this.editor = editor; } }
  • 28. Esecuzione di Query SearchManager sm = Search.getSearchManager(cache); Query query = sm.buildQueryBuilderForClass(Book.class) .get() .phrase() .onField("title") .sentence("in action") .createQuery(); List<Object> list = sm.getQuery(query).list();
  • 29. Architettura • Integra Hibernate Search (engine) – Listener a eventi Hibernate & transazioni • Eventi Infinispan & transazioni – Mappa tipi Java e grafi del modello a Documents di Lucene – Thin-layer design
  • 31. Tests per Infinispan Query https://github.com/infinispan/infinispan
  • 32. org.apache.lucene.search.Query luceneQuery = queryBuilder.phrase() .onField( "description" ) .andField( "title" ) .sentence( "a book on highly scalable query engines" ) .enableFullTextFilter( “ready-for-shipping” ) .createQuery(); CacheQuery cacheQuery = searchManager.getQuery( luceneQuery, Book.class); List<Book> objectList = cacheQuery.list();
  • 34. Problemi di scalabilitá • Writer locks globali • Sharing su NFS molto problematico
  • 35. Queue-based clustering (filesystem)
  • 36. Index stored in Infinispan
  • 37.
  • 38. Quickstart Hibernate Search • Aggiungi la dipendenza ad hibernate- search: <dependency>    <groupId>org.hibernate</groupId>    <artifactId>hibernate­search­orm</artifactId>    <version>4.1.0.Final</version> </dependency>
  • 39. Quickstart Hibernate Search • Tutto il resto é opzionale: – Come gestire gli indici – Moduli di estensione, Analyzer custom – Performance tuning – Mapping custom dei tipi – Clustering • JGroups • Infinispan • JMS
  • 40. Quickstart Hibernate @Entity Search public class Essay {    @Id    public Long getId() { return id; }    public String getSummary() { return  summary; }    @Lob     public String getText() { return text; }    @ManyToOne     public Author getAuthor() { return  author; } ...
  • 41. Quickstart Hibernate @Entity @Indexed Search public class Essay {    @Id    public Long getId() { return id; }    public String getSummary() { return  summary; }    @Lob     public String getText() { return text; }    @ManyToOne     public Author getAuthor() { return  author; } ...
  • 42. Quickstart Hibernate @Entity @Indexed Search public class Essay {    @Id    public Long getId() { return id; }    @Field    public String getSummary() { return  summary; }    @Lob     public String getText() { return text; }    @ManyToOne     public Author getAuthor() { return  author; } ...
  • 43. Quickstart Hibernate @Entity @Indexed Search public class Essay {    @Id    public Long getId() { return id; }    @Field    public String getSummary() { return  summary; }    @Lob @Field @Boost(0.8)    public String getText() { return text; }    @ManyToOne     public Author getAuthor() { return  author; } ...
  • 44. Quickstart Hibernate @Entity @Indexed Search public class Essay {    @Id    public Long getId() { return id; }    @Field    public String getSummary() { return  summary; }    @Lob @Field @Boost(0.8)    public String getText() { return text; }    @ManyToOne @IndexedEmbedded     public Author getAuthor() { return  author; } ...
  • 45. Un secondo esempio @Entity @Entity public class Author { public class Book { @Id @GeneratedValue private Integer id; private Integer id; private String title; private String name; } @OneToMany private Set<Book> books; }
  • 46. Struttura dell'indice @Entity @Indexed @Entity public class Author { public class Book { @Id @GeneratedValue private Integer id; private Integer id; @Field(store=Store.YES) private String title; @Field(store=Store.YES) } private String name; @OneToMany @IndexedEmbedded private Set<Book> books; }
  • 49. Sui risultati: • Managed POJO: modifiche alle entitá applicati sia a Lucene che al database • Paginazione JPA, familiari (standard): – .setMaxResults( 20 ).setFirstResult( 100 ); • Restrizioni sul tipo, query fulltext polimorifiche: – .createQuery( luceneQuery, A.class, B.class, ..); • Projection • Result mapping
  • 51. Uso di Infinispan per la distribuzione degli indici
  • 52. Clustering di un uso Lucene “diretto” • Usando org.apache.lucene – Tradizionalmente difficile da distribuire su nodi multipli – Su qualsiasi cloud
  • 53. Nodo singolo idea di performance Write ops/sec Queries/sec RAMDirectory RAMDirectory Infinispan 0 Infinispan 0 queries per second Infinispan D4 Infinispan D4 Infinispan D40 Infinispan D40 FSDirectory FSDirectory Infinispan Local Infinispan Local 0 50 100 150 200 250 300 350 400 0 5000 10000 15000 20000 25000
  • 54. Nodi multipli idea di performance Write ops/sec Queries/sec RAMDirectory RAMDirectory Infinispan 0 Infinispan 0 queries per second Infinispan D4 Infinispan D4 Infinispan D40 Infinispan D40 FSDirectory FSDirectory Infinispan Local Infinispan Local 0 50 100 150 200 250 300 350 400 0 5000 10000 15000 20000 25000
  • 55. Le scritture non scalano?
  • 56. Suggerimenti per performance ottimali • Calibra il chunk_size per l'uso effettivo del vostro indice (evita i read lock evitando la frammentazione) • Verifica la dimensione dei pacchetti network: blob size, JGroups packets, network interface and hardware. • Scegli e configura un CacheLoader adatto
  • 57. Requisiti di memoria • RAMDirectory: tutto l'indice (e piú) in RAM. • FSDirectory: un buon OS sa fare un ottimo lavoro di caching di IO – spesso meglio di RAMDirectory. • Infinispan: configurabile, fino alla memoria condivisa tra nodi – Flexible – Fast – Network vs. disk
  • 58. Moduli per cloud deployment scalabili One Infinispan to rule them all – Store Lucene indexes – Hibernate second level cache – Application managed cache – Datagrid – EJB, session replication in AS7 – As a JPA “store” via Hibernate OGM
  • 59. Ingredienti per la cloud • JGroups DISCOVERY protocol – MPING – TCP_PING – JDBC_PING – S3_PING • Scegli un CacheLoader – Database based, Jclouds, Cassandra, ...
  • 60. Futuro prossimo • Semplificare la scalabilitá in scrittura • Auto-tuning dei parametri di clustering – ergonomics! • Parallel searching: multi/core + multi/node • A component of – http://www.cloudtm.eu
  • 61.
  • 63. NoSQL: la flessibilitá costa • Programming model • one per product :-( • no schema => app driven schema • query (Map Reduce, specific DSL, ...) • data structure transpires • Transaction • durability / consistency
  • 64. Esempio: Infinispan Distributed Key/Value store (or Replicated, local only efficient cache, • invalidating cache) Each node is equal Just start more nodes, or kill some • No bottlenecks by design • Cloud-network friendly JGroups • And “cloud storage” friendly too! •
  • 65. ABC di Infinispan map.put( “user-34”, userInstance ); map.get( “user-34” ); map.remove( “user-34” );
  • 66. É una ConcurrentMap ! map.put( “user-34”, userInstance ); map.get( “user-34” ); map.remove( “user-34” ); map.putIfAbsent( “user-38”, another );
  • 67. Qualche altro dettaglio su Infinispan ● Support for Transactions (XA) ● CacheLoaders ● Cassandra, JDBC, Amazon S3 (jclouds),... ● Tree API for JBossCache compatibility ● Lucene integration ● Two-fold ● Some Hibernate integrations ● Second level cache ● Hibernate Search indexing backend
  • 68. Obiettivi di Hibernate OGM Encourage new data usage patterns • Familiar environment • Ease of use • easy to jump in • easy to jump out • Push NoSQL exploration in enterprises • “PaaS for existing API” initiative •
  • 69. Cos'é • JPA front end to key/value stores • Object CRUD (incl polymorphism and associations) • OO queries (JP-QL) • Reuses • Hibernate Core • Hibernate Search (and Lucene) • Infinispan • Is not a silver bullet • not for all NoSQL use cases
  • 70. Entitá come blob serializzati? • Serialize objects into the (key) value • store the whole graph? • maintain consistency with duplicated objects • guaranteed identity a == b • concurrency / latency • structure change and (de)serialization, class definition changes
  • 71. OGM’s approach to schema • Keep what’s best from relational model • as much as possible • tables / columns / pks • Decorrelate object structure from data structure • Data stored as (self-described) tuples • Core types limited • portability
  • 72.
  • 73. Query • Hibernate Search indexes entities • Store Lucene indexes in Infinispan • JP-QL to Lucene query transformation • Works for simple queries • Lucene is not a relational SQL engine
  • 74. E ora? • MongoDB • EHCache / Terracotta • Redis • Voldemort • Neo4J • Dynamo • ... Git? Spreadsheet? ...CapeDwarf?
  • 75. Q&A http://infinispan.org @Infinispan http://in.relation.to @Hibernate http://jboss.org @SanneGrinovero