SlideShare uma empresa Scribd logo
1 de 73
Baixar para ler offline
NoSQL & DataGrids from a Developer Perspective

         Cyrille Le Clerc - Michaël Figuière
Speaker

     @cyrilleleclerc
     blog.xebia.fr

          Cyrille Le Clerc
                                    Large Scale

                             DataGrids
    Apache CXF
Speaker

     @mfiguiere
     blog.xebia.fr

          Michaël Figuière           Distributed
                                     Systems

                             NoSQL
   Search Engines
About NoSQL




              No SQL
About NoSQL


         Not    Only




              No SQL
About NoSQL


         Not    Only




              No SQL
                   Relational
Once upon a time...
On the Web side

                                 - Created Dynamo
Similar needs for Web giants :
                                 - < 40 min of unavailability per year
• Huge amount of data


• High availability


• Fault tolerance
                                 - Created BigTable & MapReduce
• Scalability on commodity       - Stores every webpages of Internet
  hardware
Amazon : the birth of Dynamo



                                         Requires complex requests,
                                      temporal unavailability is acceptable


 Fill cart     Checkout     Payment    Process order   Prepare     Send




    Requires high availability,
    key-value store is enough
On the Financial side

                                 - Released Coherence in 2001
Needs within financial market :
                                 - Started as a distributed cache
• Very low latency


• Rich queries & transactions


• Scalability
                                 - Released Gigaspaces XAP in 2001
• Data consistency               - Routes the request inside the data
Data Partitioning and Replication
Use Case : Train Ticketing System




                                With trains, stations,
                                seats, booking and
                                passengers
Store everything in a Mainframe !




                               Up to 3 To of RAM !
                               More than $1,000,000




         IBM z11
Data Partitioning



                                     Partition gamma


                                                        Small
                                                        servers
                                       Partition beta



     MainFrame
                                      Partition alpha

                 Split data for scalability
Data Replication



                              Node 1




                                       synchro
   Partition alpha
                              Node 2


      Duplicate data for
      high availability and
                              Node 3
                scalability
Partitioned Data Modeling
Partitioned Data Modeling



                                   Seat
                                              Booking        Passenger
                             number
                                           reduction       name
                             price

                Train
         code
         type

                                            TrainStation
                               TrainStop
                                           code
                             date
                                           name




                        Typical relational data model
Partitionned Data Modeling

                                Partitioning ready
                                  entities tree




             e   ntity
        Root                        Seat
                                                        Booking               Passenger
                              number
                                                     reduction              name
                              price

                 Train
         code
                                                                     Du
         type                                                             pli Refe
                                                                             ca
                                                                                ted renc
                                                                                   in e d
                                                      TrainStation                    ea ata
                                TrainStop                                               ch
                                                     code                                  pa
                              date                                                            rtit
                                                                                                  ion
                                                     name




                     Find the root entity and denormalize
Partitionned Data Modeling

                       Remove unused data



                             Seat
                                        Booking        Passenger
                       number
                                     reduction       name
                       price
                       booked
               Train
        code
        type

                                      TrainStation
                         TrainStop
                                     code
                       date
                                     name
Partitionned Data Modeling


        Sharding ready data structure

                              Seat
                        number
                        price
                        booked
                Train
         code
         type

                                       TrainStation
                          TrainStop
                                      code
                        date
                                      name
Consistency, Availability and Partition Tolerance
Data Consistency with replicas

                                              Node 1
            {    "name": "Barbie Computer",
                 "price": 15.50,
                 "tags" : [
                   "doll",
                   "barbie"                   Node 2
                ]}




                write to all                  Node 3



                                              Node 1


                      read from one           Node 2


                                              Node 3
Data Consistency with replicas

              {    "name": "Barbie Computer",   Node 1
                   "price": 15.50,
                   "tags" : [
                     "doll",
                     "barbie"
                  ]}
                                                Node 2
              write to one
                                                Node 3



                                                Node 1


                                                Node 2


              read from all                     Node 3
Data Consistency with replicas

• You can adjust the balance between number of writes and number of
  reads




• See Eventual Consistency
Data Consistency with Multiple Data Centers


  {    "name": "Barbie Computer",
       "price": 15.50,
       "tags" : [
         "doll",
         "barbie"
      ]}
                                    {    "name": "Barbie Computer",
                                         "price": 15.50,
                                         "tags" : [

 West Coast                                "doll",
                                           "barbie"
                                        ]}




                                                East Coast
Data Consistency with Multiple Data Centers

 set price to $ 20.00




  {    "name": "Barbie Computer",
       "price": 20.00,
       "tags" : [
         "doll",
         "barbie"
      ]}
                                                          {    "name": "Barbie Computer",
                                                               "price": 15.50,
 West Coast                                                    "tags" : [
                                                                 "doll",
                                                                 "barbie"
                                                              ]}



                                                                East Coast
                                    propagation delay !
Data Consistency with Multiple Data Centers

 set price to $ 20.00




  {    "name": "Barbie Computer",
       "price": 20.00,
       "tags" : [
         "doll",
         "barbie"
      ]}                                               {    "name": "Barbie Computer",
                                                            "price": 15.50,

 West Coast                                                 "tags" : [
                                                              "doll",
                                                              "barbie",
                                                                “girl”
                                                           ]}


                                                            East Coast
                                                                                         add tag “girl”
                         reconciliation API needed !
Data Consistency with Multiple Data Centers

 set price to $ 20.00




  {    "name": "Barbie Computer",
       "price": 20.00,
       "tags" : [
         "doll",
         "barbie"
      ]}                                                   {    "name": "Barbie Computer",
                                                                "price": 15.50,

 West Coast                                                     "tags" : [
                                                                  "doll",
                                                                  "barbie",
                                                                    “girl”
                                                               ]}


                                                                East Coast
                                                                                             add tag “girl”
                                    Network partitioning
Data Consistency with Multiple Data Centers


                      London
       New York
                                              Tokyo




                  World wide replication
                   for financial market
CAP Theorem

                                        Only 2 of these 3
                                        properties can be
                                       achieved in storage
              Consistency
                                                   system



                        Availability
           Partition
          Tolerance
CAP Theorem


                                       Relational DB
NoSQL DB
              Consistency



                        Availability
            Partition                     Impossible
           Tolerance
Data models & APIs
Request Driven Data Modeling

• Relational data modeling is business driven

         Adaptation to requests comes with tuning



• With partitioning, data modeling had to be adapted for requests
         Because network latency matters



• NoSQL & DataGrids data modeling is request driven
         Two requests may require to store data twice
Key-Value Store


                  In memory


                  In memory
                  with async
                  persistence


                  Persistent
Example with a user profile




               johndoe   User profile as byte[]




  Similar to a Java
          HashMap
Write Example with Riak

   RiakClient riak = new RiakClient("http://server1:8098/riak");

   RiakObject userProfileObj =
      new RiakObject("bucket", "johndoe", serializer.serialize(userProfile);

   riak.store(userProfileObj);




                        Inserts a user profile
                              into Riak
Read Example with Riak


       FetchResponse response = riak.fetch("bucket", "johndoe");

       if (response.hasObject()) {

           userProfileObj = response.getObject();

       }




                  Fetch a user profile using
                        its key in Riak
Column Families Store
Column Families Store

    For each Row ID we have
      a list of key-value pairs
                                                     Key-value
                                                      pairs are
                                                   sorted by keys




    Relational DB             Column families DB
Example with a shopping cart



   johndoe     17:21   Iphone        17:32   DVD Player     17:44     MacBook


   willsmith   6:10    Camera        8:29      Ipad


   pitdavis    14:45   PlayStation     15:01     Asus EEE     15:03    Iphone
Write Example with Cassandra


Cluster cluster =
   HFactory.getOrCreateCluster("cluster", new CassandraHostConfigurator("server1:9160"));

Keyspace keyspace = HFactory.createKeyspace("EcommerceKeyspace", cluster);

Mutator<String> mutator = HFactory.createMutator(keyspace, stringSerializer);

mutator.insert("johndoe", "ShoppingCartColumnFamily",
               HFactory.createStringColumn("14:21", "Iphone"));




                         Inserts a column into the
                         ShoppingCartColumnFamily
Read Example with Cassandra


SliceQuery<String, String, String> query =
    HFactory.createSliceQuery(keyspace,
                              stringSerializer, stringSerializer, stringSerializer);

query.setColumnFamily("ShoppingCartColumnFamily")
     .setKey("johndoe")
     .setRange("", "", false, 10);

QueryResult<ColumnSlice<String, String>> result = query.execute();




                       Reads a slice of 10 columns
                     from ShoppingCartColumnFamily
Document Store
Example with an item of a catalog


                          {
                              "name": "Iphone",
                              "price": 559.0,
            item_1            "vendor": "Apple",
                              "rating": 4.6,
                              "tags": [ "phone", "touch" ]
                          }




   The database is aware of
     document’s fields and
        can offers complex
                    queries
Write Example with MongoDB

       Mongo mongo = new Mongo("mongos_1", 27017);
       DB db = mongo.getDB("Ecommerce");
       DBCollection catalog = db.getCollection("Catalog");

       BasicDBObject doc = new BasicDBObject();
       doc.put("name", "Iphone");
       doc.put("price", 559.0);

       catalog.insert(doc);




                     Inserts an item
                  document into MongoDB
Read Example with MongoDB


        BasicDBObject query = new BasicDBObject();
        query.put("price", new BasicDBObject("$lt", 600));
        DBCursor cursor = catalog.find(query);

        while(cursor.hasNext()) {
           System.out.println(cursor.next());
        }




               Queries for all items with
                a price lower than 600
In Memory Data Grids




                       eXtreme Scale
Example with train booking with IBM eXtremeScale
  @Entity(schemaRoot=true)
  public class Train {                                                 Seat
                                                                 number
                                                                 price
      @Id
                                                                 booked
      String code;                                       Train
                                                  code
      @Index                                      type
      @Basic
                                                                   TrainStop
      String name;
                                                                 date

      @OneToMany(cascade=CascadeType.ALL)
      List<Seat> seats = new ArrayList<Seat>();

      @Version
      int version;

      ...
  }                                    With Data Grids,
                                       sub entities can have
                                       cross relations
Write Example with IBM eXtreme Scale

                          eXtreme Scale provides
                          a JPA Style API

              void persist(Train train) {
                  entityManager.persist(train);
              }




                 Inserts a train into
                   eXtreme Scale
Read Example with IBM eXtreme Scale

/** Find by key */
Train findById(String id) {
   return (Train) entityManager.find(Train.class, id);
}


/** Query Language */
Train findByTrain(String code) {
   Query q = entityManager.createQuery("select t from Train t where t.code=:code");
   q.setParameter("code", code);

    return (Train) q.getSingleResult();
}



                        Simple and complex queries
                           with eXtreme Scale
More APIs

• Another Java EE versus Spring battle ? JSR 347 Data Grids vs. Spring Data


         Unified API ontop of relational, document, column, key-value ?


         Object to tuple projection API
Transactions
Transactions

• NoSQL usually means NO transactions

• Except when it means eXtreme Transactions !
Transactions Concurrency

Place order
                                                                       231

   canon-eos: 1
   ipod : 1
   headphone : 1
                                                                 311
   iphone: 1
   ...




    ipad : 1                                                    121
    iphone: 1
                                                                             264


                       concurrency on iphone           2
   barbie : 1
   iphone: 1                                                      637
   cabbage-doll: 1

                                                           12

                     cancel order if one product   warehouse stocks
                              is missing
SQL Transactions

 Place order
                                                                     231

     canon-eos: 1
     ipod : 1          begin
     headphone : 1
                                                               311
     iphone: 1
     ...
                       for each
                       shoppingCart.product
                         select for update ...
                                                              121
      ipad : 1
      iphone: 1
                         update ...
                                                                           264
                       commit
                                                     2
     barbie : 1
     iphone: 1
     cabbage-doll: 1                                                 637

                                                         12

                                                 warehouse stocks

lock duration = f(shoppingcart.length)
if too many locks on the rows, then lock table !
SQL Transactions

 Place order           select for update ...

                                                                   231

     canon-eos: 1
     ipod : 1
     headphone : 1
                                                             311
     iphone: 1
     ...




      ipad : 1                                              121
      iphone: 1
                                                                         264

                                                   2
     barbie : 1
     iphone: 1
     cabbage-doll: 1                                               637

                                                       12

                                               warehouse stocks

lock duration = f(shoppingcart.length)
if too many locks on the rows, then lock table !
SQL Transactions

 Place order           select for update ...

                                                               231

     canon-eos: 1
     ipod : 1
     headphone : 1
                                                         311
     iphone: 1
     ...




      ipad : 1                                          121
      iphone: 1
                                                                     264

                                                   2
     barbie : 1
     iphone: 1
     cabbage-doll: 1
                                                              637

                                                   12

                                               warehouse stocks
lock duration = f(shoppingcart.length)
if too many locks on the rows, then lock table !
Transactions with Manual Compensation

     Place order
                            DO
                                                   -1
                if(stock - quantity > 0) {
                  stock = stock - quantity;
                } else {
                  throw exception() !
                                                                                                          231
                           UNDO
                stock = stock + quantity;




                                                                                                    311
canon-eos: 1                                  -1
                            DO
ipod : 1        if(stock - quantity > 0) {

headphone : 1     stock = stock - quantity;
                } else {
                  throw exception() !
iphone: 1
...                        UNDO
                stock = stock + quantity;


                                              -1
                                                                                                   121
                            DO
                if(stock - quantity > 0) {

                                                                                                                264
                  stock = stock - quantity;
                } else {
                  throw exception() !


                           UNDO
                stock = stock + quantity;
                                                                                          2

                                              -1                     DO
                            DO
                if(stock - quantity > 0) {              if(stock - quantity > 0) {
                  stock = stock - quantity;
                } else {
                  throw exception() !
                                                          stock = stock - quantity;                       637
                                                        } else {
                           UNDO
                stock = stock + quantity;
                                                          throw exception() !                 12
                                                        }
                                                                                      warehouse stocks
                                                                    UNDO
                                                        stock = stock + quantity;


   code “do”, “undo” and the chain
Transactions with Manual Compensation

     Place order
                              DO
                                                     -1
                  if(stock - quantity > 0) {
                    stock = stock - quantity;
                  } else {
                    throw exception() !
                                                                      231
                             UNDO
                  stock = stock + quantity;                  637

barbie : 1
iphone: 1                     DO
                  if(stock - quantity > 0) {
                                                -1                          311
cabbage-doll: 1     stock = stock - quantity;
                  } else {
                    throw exception() !


                             UNDO
                  stock = stock + quantity;                  0

                              DO
                                                                        264
                  if(stock - quantity > 0) {
                    stock = stock - quantity;
                                                -1
                  } else {
                    throw exception() !


                             UNDO
                  stock = stock + quantity;                      12

                                                                            121




                                                          warehouse stocks
Transactions with Manual Compensation

     Place order
                              DO
                                                     -1
                  if(stock - quantity > 0) {
                    stock = stock - quantity;
                  } else {
                    throw exception() !
                                                                      231
                             UNDO
                  stock = stock + quantity;                  636

barbie : 1
iphone: 1                     DO
                  if(stock - quantity > 0) {
                                                -1                          311
cabbage-doll: 1     stock = stock - quantity;
                  } else {
                    throw exception() !


                             UNDO
                  stock = stock + quantity;                  0

                              DO
                                                                        264
                  if(stock - quantity > 0) {
                    stock = stock - quantity;
                                                -1
                  } else {
                    throw exception() !


                             UNDO
                  stock = stock + quantity;                      12

                                                                            121




                                                          warehouse stocks
Transactions with Manual Compensation

     Place order
                              DO
                                                     -1
                  if(stock - quantity > 0) {
                    stock = stock - quantity;
                  } else {
                    throw exception() !
                                                                                         231
                             UNDO
                  stock = stock + quantity;                                     636

barbie : 1
iphone: 1                     DO
                  if(stock - quantity > 0) {
                                                -1                                             311
cabbage-doll: 1     stock = stock - quantity;
                  } else {




                                                          no more iphone !
                    throw exception() !


                             UNDO
                  stock = stock + quantity;                                     0

                              DO
                                                                                           264
                  if(stock - quantity > 0) {
                    stock = stock - quantity;
                                                -1
                  } else {
                    throw exception() !


                             UNDO
                  stock = stock + quantity;                                         12

                                                                                               121




                                                                             warehouse stocks
Transactions with Manual Compensation

     Place order
                              DO
                                                     -1
                  if(stock - quantity > 0) {
                    stock = stock - quantity;
                  } else {
                    throw exception() !
                                                                                    231
                             UNDO
                  stock = stock + quantity;                                636

barbie : 1
iphone: 1                                       -1                                        311
                                                          interrupted
                              DO
                  if(stock - quantity > 0) {
cabbage-doll: 1     stock = stock - quantity;
                  } else {
                    throw exception() !


                             UNDO
                  stock = stock + quantity;                                0

                              DO
                                                                                      264
                                                -1
                                                          cancelled
                  if(stock - quantity > 0) {
                    stock = stock - quantity;
                  } else {
                    throw exception() !


                             UNDO
                  stock = stock + quantity;                                    12

                                                                                          121




                                                                        warehouse stocks
Transactions with Manual Compensation

     Place order
                                DO
                                                       -1
                    if(stock - quantity > 0) {




                                                        undo
                      stock = stock - quantity;
                    } else {
                      throw exception() !
                                                                                                   231
                               UNDO
                    stock = stock + quantity;                                             636 +1

barbie : 1                    DO
iphone: 1                                         -1                                                     311
                                                            interrupted
                  if(stock - quantity > 0) {
                    stock = stock - quantity;
cabbage-doll: 1   } else {
                    throw exception() !


                             UNDO
                  stock = stock + quantity;
                                                                                         0

                               DO
                                                                                                     264
                                                  -1
                                                            cancelled
                  if(stock - quantity > 0) {
                    stock = stock - quantity;
                  } else {
                    throw exception() !


                             UNDO
                  stock = stock + quantity;                                                  12

                                                                     DO                                  121
                                                        if(stock - quantity > 0) {
                                                          stock = stock - quantity;
                                                        } else {

                                                        }
                                                          throw exception() !
                                                                                      warehouse stocks
                                                                    UNDO
                                                        stock = stock + quantity;
Transactions with Manual Compensation



• Code “do” & “undo” & chain execution


• What about interrupted chain execution ? Data corruption ?
Transactions with Manual Compensation



• Code “do” & “undo” & chain execution


• What about interrupted chain execution ? Data corruption ?


      data store managed transaction chain execution
Which solution to choose?
Key-Value Store

• Get and Set by key

         Simple but enough for a lot of use cases



• Riak and Voldemort provide a great scalability
         Great to persist continuously growing datasets



• Memcached and Redis offer low overhead and latency
         Great for cache and live data
Column Families Store

• Get and Set by key of a list of columns

         Makes it possible to fetch and update partial data



• Queries are simples, but columns slice fetching is possible
         Great for pagination



• Data model is too low level for many complex data modeling
         Should typically be used for the largest scalability needs
Document Store

• Schema less

         Great for continuously updated schemas



• Complex queries are available
         Necessary for filtering and search



• Scalability may be limited if not querying using partition key
         Can be handle using multiple storage and limited queries
In Memory Data Grid

• Very Low Latency & eXtreme Transaction Processing (XTP)

        Investment banking, booking & inventory systems



• In Memory - No Persistence
         Most of the time backed with a database



• High budget and Developer skills required
        Some Open Source alternatives are appearing
Polyglot storage for eCommerce

                  Products
                                                  Solr
                  search


                             Product catalog    MongoDB

    Application
                             User account and
                                                Cassandra
                              Shopping cart


             Warehouse
              inventory                         Coherence
Why NoSQL & DataGrids matter ?

• Polyglot Storage: databases that fit the needs of every type of data


• Linear Scalability: being able to handle any further business requirements


• High Availability: multi-servers and multi-datacenters


• Elasticity: natural integration with Cloud Computing philosophy


• Some new use cases now available
Questions / Answers




                      ?

Mais conteúdo relacionado

Semelhante a GeeCon 2011 - NoSQL and In Memory Data Grids from a developer perspective

Large Scale Data Analysis Tools
Large Scale Data Analysis ToolsLarge Scale Data Analysis Tools
Large Scale Data Analysis Toolsboorad
 
Coderfaire Data Networking for Developers
Coderfaire Data Networking for DevelopersCoderfaire Data Networking for Developers
Coderfaire Data Networking for DevelopersJason Myers
 
High Performance Cloud Computing
High Performance Cloud ComputingHigh Performance Cloud Computing
High Performance Cloud ComputingAmazon Web Services
 
Balancing Replication and Partitioning in a Distributed Java Database
Balancing Replication and Partitioning in a Distributed Java DatabaseBalancing Replication and Partitioning in a Distributed Java Database
Balancing Replication and Partitioning in a Distributed Java DatabaseBen Stopford
 
Scalable Computing Labs (SCL).
Scalable Computing Labs (SCL).Scalable Computing Labs (SCL).
Scalable Computing Labs (SCL).Mindtree Ltd.
 
Introduction to Elastic MapReduce
Introduction to Elastic MapReduceIntroduction to Elastic MapReduce
Introduction to Elastic MapReduceAmazon Web Services
 
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...JAX London
 
Detecting and Recognising Highly Arbitrary Shaped Texts from Product Images
Detecting and Recognising Highly Arbitrary Shaped Texts from Product ImagesDetecting and Recognising Highly Arbitrary Shaped Texts from Product Images
Detecting and Recognising Highly Arbitrary Shaped Texts from Product ImagesDatabricks
 
How to Include GIS 3D Technology in Transport Network Representation
How to Include GIS 3D Technology in Transport Network RepresentationHow to Include GIS 3D Technology in Transport Network Representation
How to Include GIS 3D Technology in Transport Network RepresentationEsri
 
Take the spaghetti out of windows azure – an insight for it pro techies part 1
Take the spaghetti out of windows azure – an insight for it pro techies part 1Take the spaghetti out of windows azure – an insight for it pro techies part 1
Take the spaghetti out of windows azure – an insight for it pro techies part 1Microsoft TechNet - Belgium and Luxembourg
 
Data Driven Innovation with Amazon Web Services
Data Driven Innovation with Amazon Web ServicesData Driven Innovation with Amazon Web Services
Data Driven Innovation with Amazon Web ServicesAmazon Web Services
 
Millions quotes per second in pure java
Millions quotes per second in pure javaMillions quotes per second in pure java
Millions quotes per second in pure javaRoman Elizarov
 
What’s new in Visual Studio 2012 & .NET 4.5
What’s new in Visual Studio 2012 & .NET 4.5What’s new in Visual Studio 2012 & .NET 4.5
What’s new in Visual Studio 2012 & .NET 4.5Robert MacLean
 

Semelhante a GeeCon 2011 - NoSQL and In Memory Data Grids from a developer perspective (20)

VO Course 06: VO Data-models
VO Course 06: VO Data-modelsVO Course 06: VO Data-models
VO Course 06: VO Data-models
 
Large Scale Data Analysis Tools
Large Scale Data Analysis ToolsLarge Scale Data Analysis Tools
Large Scale Data Analysis Tools
 
Coderfaire Data Networking for Developers
Coderfaire Data Networking for DevelopersCoderfaire Data Networking for Developers
Coderfaire Data Networking for Developers
 
Data Aggregation System
Data Aggregation SystemData Aggregation System
Data Aggregation System
 
High Performance Cloud Computing
High Performance Cloud ComputingHigh Performance Cloud Computing
High Performance Cloud Computing
 
6 Months Net
6 Months Net6 Months Net
6 Months Net
 
Balancing Replication and Partitioning in a Distributed Java Database
Balancing Replication and Partitioning in a Distributed Java DatabaseBalancing Replication and Partitioning in a Distributed Java Database
Balancing Replication and Partitioning in a Distributed Java Database
 
Scalable Computing Labs (SCL).
Scalable Computing Labs (SCL).Scalable Computing Labs (SCL).
Scalable Computing Labs (SCL).
 
Ieee metadata-conf-1999-keynote-amit sheth
Ieee metadata-conf-1999-keynote-amit shethIeee metadata-conf-1999-keynote-amit sheth
Ieee metadata-conf-1999-keynote-amit sheth
 
Introduction to Elastic MapReduce
Introduction to Elastic MapReduceIntroduction to Elastic MapReduce
Introduction to Elastic MapReduce
 
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
Java Tech & Tools | Beyond the Data Grid: Coherence, Normalisation, Joins and...
 
Detecting and Recognising Highly Arbitrary Shaped Texts from Product Images
Detecting and Recognising Highly Arbitrary Shaped Texts from Product ImagesDetecting and Recognising Highly Arbitrary Shaped Texts from Product Images
Detecting and Recognising Highly Arbitrary Shaped Texts from Product Images
 
How to Include GIS 3D Technology in Transport Network Representation
How to Include GIS 3D Technology in Transport Network RepresentationHow to Include GIS 3D Technology in Transport Network Representation
How to Include GIS 3D Technology in Transport Network Representation
 
Introduction to AWS tools
Introduction to AWS toolsIntroduction to AWS tools
Introduction to AWS tools
 
Take the spaghetti out of windows azure – an insight for it pro techies part 1
Take the spaghetti out of windows azure – an insight for it pro techies part 1Take the spaghetti out of windows azure – an insight for it pro techies part 1
Take the spaghetti out of windows azure – an insight for it pro techies part 1
 
Data Driven Innovation with Amazon Web Services
Data Driven Innovation with Amazon Web ServicesData Driven Innovation with Amazon Web Services
Data Driven Innovation with Amazon Web Services
 
Dancing with the Elephant
Dancing with the ElephantDancing with the Elephant
Dancing with the Elephant
 
Millions quotes per second in pure java
Millions quotes per second in pure javaMillions quotes per second in pure java
Millions quotes per second in pure java
 
What’s new in Visual Studio 2012 & .NET 4.5
What’s new in Visual Studio 2012 & .NET 4.5What’s new in Visual Studio 2012 & .NET 4.5
What’s new in Visual Studio 2012 & .NET 4.5
 
Drra brief
Drra briefDrra brief
Drra brief
 

Mais de Publicis Sapient Engineering

XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainXebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainPublicis Sapient Engineering
 
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurXebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurPublicis Sapient Engineering
 
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...Publicis Sapient Engineering
 
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin Publicis Sapient Engineering
 
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?Publicis Sapient Engineering
 
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?Publicis Sapient Engineering
 
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéXebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéPublicis Sapient Engineering
 
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...Publicis Sapient Engineering
 
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !Publicis Sapient Engineering
 
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizXebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizPublicis Sapient Engineering
 
XebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilitéXebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilitéPublicis Sapient Engineering
 
XebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectXebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectPublicis Sapient Engineering
 
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...Publicis Sapient Engineering
 
XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018Publicis Sapient Engineering
 
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...Publicis Sapient Engineering
 
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...Publicis Sapient Engineering
 

Mais de Publicis Sapient Engineering (20)

XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humainXebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
XebiCon'18 - L'algorithme de reconnaissance de formes par le cerveau humain
 
Xebicon'18 - IoT: From Edge to Cloud
Xebicon'18 - IoT: From Edge to CloudXebicon'18 - IoT: From Edge to Cloud
Xebicon'18 - IoT: From Edge to Cloud
 
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurXebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
 
XebiCon'18 - Modern Infrastructure
XebiCon'18 - Modern InfrastructureXebiCon'18 - Modern Infrastructure
XebiCon'18 - Modern Infrastructure
 
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
XebiCon'18 - La Web App d'aujourd'hui et de demain : état de l'art et bleedin...
 
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
XebiCon'18 - Des notebook pour le monitoring avec Zeppelin
 
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
XebiCon'18 - Event Sourcing et RGPD, incompatibles ?
 
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
XebiCon'18 - Deno, le nouveau NodeJS qui inverse la tendance ?
 
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribuéXebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
XebiCon'18 - Boostez vos modèles avec du Deep Learning distribué
 
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
XebiCon'18 - Comment j'ai développé un jeu vidéo avec des outils de développe...
 
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
XebiCon'18 - Les utilisateurs finaux, les oubliés de nos produits !
 
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des datavizXebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
XebiCon'18 - Comment fausser l'interprétation de vos résultats avec des dataviz
 
XebiCon'18 - Le développeur dans la Pop Culture
XebiCon'18 - Le développeur dans la Pop Culture XebiCon'18 - Le développeur dans la Pop Culture
XebiCon'18 - Le développeur dans la Pop Culture
 
XebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilitéXebiCon'18 - Architecturer son application mobile pour la durabilité
XebiCon'18 - Architecturer son application mobile pour la durabilité
 
XebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID ConnectXebiCon'18 - Sécuriser son API avec OpenID Connect
XebiCon'18 - Sécuriser son API avec OpenID Connect
 
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
XebiCon'18 - Structuration du Temps et Dynamique de Groupes, Théorie organisa...
 
XebiCon'18 - Spark NLP, un an après
XebiCon'18 - Spark NLP, un an aprèsXebiCon'18 - Spark NLP, un an après
XebiCon'18 - Spark NLP, un an après
 
XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018XebiCon'18 - La sécurité, douce illusion même en 2018
XebiCon'18 - La sécurité, douce illusion même en 2018
 
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
XebiCon'18 - Utiliser Hyperledger Fabric pour la création d'une blockchain pr...
 
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
XebiCon'18 - Ce que l'histoire du métro Parisien m'a enseigné sur la création...
 

Último

Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 

Último (20)

Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 

GeeCon 2011 - NoSQL and In Memory Data Grids from a developer perspective

  • 1. NoSQL & DataGrids from a Developer Perspective Cyrille Le Clerc - Michaël Figuière
  • 2. Speaker @cyrilleleclerc blog.xebia.fr Cyrille Le Clerc Large Scale DataGrids Apache CXF
  • 3. Speaker @mfiguiere blog.xebia.fr Michaël Figuière Distributed Systems NoSQL Search Engines
  • 4. About NoSQL No SQL
  • 5. About NoSQL Not Only No SQL
  • 6. About NoSQL Not Only No SQL Relational
  • 7. Once upon a time...
  • 8. On the Web side - Created Dynamo Similar needs for Web giants : - < 40 min of unavailability per year • Huge amount of data • High availability • Fault tolerance - Created BigTable & MapReduce • Scalability on commodity - Stores every webpages of Internet hardware
  • 9. Amazon : the birth of Dynamo Requires complex requests, temporal unavailability is acceptable Fill cart Checkout Payment Process order Prepare Send Requires high availability, key-value store is enough
  • 10. On the Financial side - Released Coherence in 2001 Needs within financial market : - Started as a distributed cache • Very low latency • Rich queries & transactions • Scalability - Released Gigaspaces XAP in 2001 • Data consistency - Routes the request inside the data
  • 11. Data Partitioning and Replication
  • 12. Use Case : Train Ticketing System With trains, stations, seats, booking and passengers
  • 13. Store everything in a Mainframe ! Up to 3 To of RAM ! More than $1,000,000 IBM z11
  • 14. Data Partitioning Partition gamma Small servers Partition beta MainFrame Partition alpha Split data for scalability
  • 15. Data Replication Node 1 synchro Partition alpha Node 2 Duplicate data for high availability and Node 3 scalability
  • 17. Partitioned Data Modeling Seat Booking Passenger number reduction name price Train code type TrainStation TrainStop code date name Typical relational data model
  • 18. Partitionned Data Modeling Partitioning ready entities tree e ntity Root Seat Booking Passenger number reduction name price Train code Du type pli Refe ca ted renc in e d TrainStation ea ata TrainStop ch code pa date rtit ion name Find the root entity and denormalize
  • 19. Partitionned Data Modeling Remove unused data Seat Booking Passenger number reduction name price booked Train code type TrainStation TrainStop code date name
  • 20. Partitionned Data Modeling Sharding ready data structure Seat number price booked Train code type TrainStation TrainStop code date name
  • 21. Consistency, Availability and Partition Tolerance
  • 22. Data Consistency with replicas Node 1 { "name": "Barbie Computer", "price": 15.50, "tags" : [ "doll", "barbie" Node 2 ]} write to all Node 3 Node 1 read from one Node 2 Node 3
  • 23. Data Consistency with replicas { "name": "Barbie Computer", Node 1 "price": 15.50, "tags" : [ "doll", "barbie" ]} Node 2 write to one Node 3 Node 1 Node 2 read from all Node 3
  • 24. Data Consistency with replicas • You can adjust the balance between number of writes and number of reads • See Eventual Consistency
  • 25. Data Consistency with Multiple Data Centers { "name": "Barbie Computer", "price": 15.50, "tags" : [ "doll", "barbie" ]} { "name": "Barbie Computer", "price": 15.50, "tags" : [ West Coast "doll", "barbie" ]} East Coast
  • 26. Data Consistency with Multiple Data Centers set price to $ 20.00 { "name": "Barbie Computer", "price": 20.00, "tags" : [ "doll", "barbie" ]} { "name": "Barbie Computer", "price": 15.50, West Coast "tags" : [ "doll", "barbie" ]} East Coast propagation delay !
  • 27. Data Consistency with Multiple Data Centers set price to $ 20.00 { "name": "Barbie Computer", "price": 20.00, "tags" : [ "doll", "barbie" ]} { "name": "Barbie Computer", "price": 15.50, West Coast "tags" : [ "doll", "barbie", “girl” ]} East Coast add tag “girl” reconciliation API needed !
  • 28. Data Consistency with Multiple Data Centers set price to $ 20.00 { "name": "Barbie Computer", "price": 20.00, "tags" : [ "doll", "barbie" ]} { "name": "Barbie Computer", "price": 15.50, West Coast "tags" : [ "doll", "barbie", “girl” ]} East Coast add tag “girl” Network partitioning
  • 29. Data Consistency with Multiple Data Centers London New York Tokyo World wide replication for financial market
  • 30. CAP Theorem Only 2 of these 3 properties can be achieved in storage Consistency system Availability Partition Tolerance
  • 31. CAP Theorem Relational DB NoSQL DB Consistency Availability Partition Impossible Tolerance
  • 33. Request Driven Data Modeling • Relational data modeling is business driven Adaptation to requests comes with tuning • With partitioning, data modeling had to be adapted for requests Because network latency matters • NoSQL & DataGrids data modeling is request driven Two requests may require to store data twice
  • 34. Key-Value Store In memory In memory with async persistence Persistent
  • 35. Example with a user profile johndoe User profile as byte[] Similar to a Java HashMap
  • 36. Write Example with Riak RiakClient riak = new RiakClient("http://server1:8098/riak"); RiakObject userProfileObj = new RiakObject("bucket", "johndoe", serializer.serialize(userProfile); riak.store(userProfileObj); Inserts a user profile into Riak
  • 37. Read Example with Riak FetchResponse response = riak.fetch("bucket", "johndoe"); if (response.hasObject()) { userProfileObj = response.getObject(); } Fetch a user profile using its key in Riak
  • 39. Column Families Store For each Row ID we have a list of key-value pairs Key-value pairs are sorted by keys Relational DB Column families DB
  • 40. Example with a shopping cart johndoe 17:21 Iphone 17:32 DVD Player 17:44 MacBook willsmith 6:10 Camera 8:29 Ipad pitdavis 14:45 PlayStation 15:01 Asus EEE 15:03 Iphone
  • 41. Write Example with Cassandra Cluster cluster = HFactory.getOrCreateCluster("cluster", new CassandraHostConfigurator("server1:9160")); Keyspace keyspace = HFactory.createKeyspace("EcommerceKeyspace", cluster); Mutator<String> mutator = HFactory.createMutator(keyspace, stringSerializer); mutator.insert("johndoe", "ShoppingCartColumnFamily", HFactory.createStringColumn("14:21", "Iphone")); Inserts a column into the ShoppingCartColumnFamily
  • 42. Read Example with Cassandra SliceQuery<String, String, String> query = HFactory.createSliceQuery(keyspace, stringSerializer, stringSerializer, stringSerializer); query.setColumnFamily("ShoppingCartColumnFamily") .setKey("johndoe") .setRange("", "", false, 10); QueryResult<ColumnSlice<String, String>> result = query.execute(); Reads a slice of 10 columns from ShoppingCartColumnFamily
  • 44. Example with an item of a catalog { "name": "Iphone", "price": 559.0, item_1 "vendor": "Apple", "rating": 4.6, "tags": [ "phone", "touch" ] } The database is aware of document’s fields and can offers complex queries
  • 45. Write Example with MongoDB Mongo mongo = new Mongo("mongos_1", 27017); DB db = mongo.getDB("Ecommerce"); DBCollection catalog = db.getCollection("Catalog"); BasicDBObject doc = new BasicDBObject(); doc.put("name", "Iphone"); doc.put("price", 559.0); catalog.insert(doc); Inserts an item document into MongoDB
  • 46. Read Example with MongoDB BasicDBObject query = new BasicDBObject(); query.put("price", new BasicDBObject("$lt", 600)); DBCursor cursor = catalog.find(query); while(cursor.hasNext()) { System.out.println(cursor.next()); } Queries for all items with a price lower than 600
  • 47. In Memory Data Grids eXtreme Scale
  • 48. Example with train booking with IBM eXtremeScale @Entity(schemaRoot=true) public class Train { Seat number price @Id booked String code; Train code @Index type @Basic TrainStop String name; date @OneToMany(cascade=CascadeType.ALL) List<Seat> seats = new ArrayList<Seat>(); @Version int version; ... } With Data Grids, sub entities can have cross relations
  • 49. Write Example with IBM eXtreme Scale eXtreme Scale provides a JPA Style API void persist(Train train) { entityManager.persist(train); } Inserts a train into eXtreme Scale
  • 50. Read Example with IBM eXtreme Scale /** Find by key */ Train findById(String id) { return (Train) entityManager.find(Train.class, id); } /** Query Language */ Train findByTrain(String code) { Query q = entityManager.createQuery("select t from Train t where t.code=:code"); q.setParameter("code", code); return (Train) q.getSingleResult(); } Simple and complex queries with eXtreme Scale
  • 51. More APIs • Another Java EE versus Spring battle ? JSR 347 Data Grids vs. Spring Data Unified API ontop of relational, document, column, key-value ? Object to tuple projection API
  • 53. Transactions • NoSQL usually means NO transactions • Except when it means eXtreme Transactions !
  • 54. Transactions Concurrency Place order 231 canon-eos: 1 ipod : 1 headphone : 1 311 iphone: 1 ... ipad : 1 121 iphone: 1 264 concurrency on iphone 2 barbie : 1 iphone: 1 637 cabbage-doll: 1 12 cancel order if one product warehouse stocks is missing
  • 55. SQL Transactions Place order 231 canon-eos: 1 ipod : 1 begin headphone : 1 311 iphone: 1 ... for each shoppingCart.product select for update ... 121 ipad : 1 iphone: 1 update ... 264 commit 2 barbie : 1 iphone: 1 cabbage-doll: 1 637 12 warehouse stocks lock duration = f(shoppingcart.length) if too many locks on the rows, then lock table !
  • 56. SQL Transactions Place order select for update ... 231 canon-eos: 1 ipod : 1 headphone : 1 311 iphone: 1 ... ipad : 1 121 iphone: 1 264 2 barbie : 1 iphone: 1 cabbage-doll: 1 637 12 warehouse stocks lock duration = f(shoppingcart.length) if too many locks on the rows, then lock table !
  • 57. SQL Transactions Place order select for update ... 231 canon-eos: 1 ipod : 1 headphone : 1 311 iphone: 1 ... ipad : 1 121 iphone: 1 264 2 barbie : 1 iphone: 1 cabbage-doll: 1 637 12 warehouse stocks lock duration = f(shoppingcart.length) if too many locks on the rows, then lock table !
  • 58. Transactions with Manual Compensation Place order DO -1 if(stock - quantity > 0) { stock = stock - quantity; } else { throw exception() ! 231 UNDO stock = stock + quantity; 311 canon-eos: 1 -1 DO ipod : 1 if(stock - quantity > 0) { headphone : 1 stock = stock - quantity; } else { throw exception() ! iphone: 1 ... UNDO stock = stock + quantity; -1 121 DO if(stock - quantity > 0) { 264 stock = stock - quantity; } else { throw exception() ! UNDO stock = stock + quantity; 2 -1 DO DO if(stock - quantity > 0) { if(stock - quantity > 0) { stock = stock - quantity; } else { throw exception() ! stock = stock - quantity; 637 } else { UNDO stock = stock + quantity; throw exception() ! 12 } warehouse stocks UNDO stock = stock + quantity; code “do”, “undo” and the chain
  • 59. Transactions with Manual Compensation Place order DO -1 if(stock - quantity > 0) { stock = stock - quantity; } else { throw exception() ! 231 UNDO stock = stock + quantity; 637 barbie : 1 iphone: 1 DO if(stock - quantity > 0) { -1 311 cabbage-doll: 1 stock = stock - quantity; } else { throw exception() ! UNDO stock = stock + quantity; 0 DO 264 if(stock - quantity > 0) { stock = stock - quantity; -1 } else { throw exception() ! UNDO stock = stock + quantity; 12 121 warehouse stocks
  • 60. Transactions with Manual Compensation Place order DO -1 if(stock - quantity > 0) { stock = stock - quantity; } else { throw exception() ! 231 UNDO stock = stock + quantity; 636 barbie : 1 iphone: 1 DO if(stock - quantity > 0) { -1 311 cabbage-doll: 1 stock = stock - quantity; } else { throw exception() ! UNDO stock = stock + quantity; 0 DO 264 if(stock - quantity > 0) { stock = stock - quantity; -1 } else { throw exception() ! UNDO stock = stock + quantity; 12 121 warehouse stocks
  • 61. Transactions with Manual Compensation Place order DO -1 if(stock - quantity > 0) { stock = stock - quantity; } else { throw exception() ! 231 UNDO stock = stock + quantity; 636 barbie : 1 iphone: 1 DO if(stock - quantity > 0) { -1 311 cabbage-doll: 1 stock = stock - quantity; } else { no more iphone ! throw exception() ! UNDO stock = stock + quantity; 0 DO 264 if(stock - quantity > 0) { stock = stock - quantity; -1 } else { throw exception() ! UNDO stock = stock + quantity; 12 121 warehouse stocks
  • 62. Transactions with Manual Compensation Place order DO -1 if(stock - quantity > 0) { stock = stock - quantity; } else { throw exception() ! 231 UNDO stock = stock + quantity; 636 barbie : 1 iphone: 1 -1 311 interrupted DO if(stock - quantity > 0) { cabbage-doll: 1 stock = stock - quantity; } else { throw exception() ! UNDO stock = stock + quantity; 0 DO 264 -1 cancelled if(stock - quantity > 0) { stock = stock - quantity; } else { throw exception() ! UNDO stock = stock + quantity; 12 121 warehouse stocks
  • 63. Transactions with Manual Compensation Place order DO -1 if(stock - quantity > 0) { undo stock = stock - quantity; } else { throw exception() ! 231 UNDO stock = stock + quantity; 636 +1 barbie : 1 DO iphone: 1 -1 311 interrupted if(stock - quantity > 0) { stock = stock - quantity; cabbage-doll: 1 } else { throw exception() ! UNDO stock = stock + quantity; 0 DO 264 -1 cancelled if(stock - quantity > 0) { stock = stock - quantity; } else { throw exception() ! UNDO stock = stock + quantity; 12 DO 121 if(stock - quantity > 0) { stock = stock - quantity; } else { } throw exception() ! warehouse stocks UNDO stock = stock + quantity;
  • 64. Transactions with Manual Compensation • Code “do” & “undo” & chain execution • What about interrupted chain execution ? Data corruption ?
  • 65. Transactions with Manual Compensation • Code “do” & “undo” & chain execution • What about interrupted chain execution ? Data corruption ? data store managed transaction chain execution
  • 66. Which solution to choose?
  • 67. Key-Value Store • Get and Set by key Simple but enough for a lot of use cases • Riak and Voldemort provide a great scalability Great to persist continuously growing datasets • Memcached and Redis offer low overhead and latency Great for cache and live data
  • 68. Column Families Store • Get and Set by key of a list of columns Makes it possible to fetch and update partial data • Queries are simples, but columns slice fetching is possible Great for pagination • Data model is too low level for many complex data modeling Should typically be used for the largest scalability needs
  • 69. Document Store • Schema less Great for continuously updated schemas • Complex queries are available Necessary for filtering and search • Scalability may be limited if not querying using partition key Can be handle using multiple storage and limited queries
  • 70. In Memory Data Grid • Very Low Latency & eXtreme Transaction Processing (XTP) Investment banking, booking & inventory systems • In Memory - No Persistence Most of the time backed with a database • High budget and Developer skills required Some Open Source alternatives are appearing
  • 71. Polyglot storage for eCommerce Products Solr search Product catalog MongoDB Application User account and Cassandra Shopping cart Warehouse inventory Coherence
  • 72. Why NoSQL & DataGrids matter ? • Polyglot Storage: databases that fit the needs of every type of data • Linear Scalability: being able to handle any further business requirements • High Availability: multi-servers and multi-datacenters • Elasticity: natural integration with Cloud Computing philosophy • Some new use cases now available