SlideShare una empresa de Scribd logo
1 de 47
Taming NoSQL with Spring
                 Sergi Almar
                 @sergialmar
About Sergi Almar
‣CTO @ PayTouch
‣VMWare / SpringSource Certified
Instructor
‣javaHispano JUG core member
‣Spring I/O organizer (hope to see you next
year in Spain)
Database evolution


  1990$


  RDBS$
Database evolution


  1990$       2000#
               RDBS#
  RDBS$
               OLAP#/#
                 BI#
Database evolution


  1990$       2000#      2010$
                           RDBS$
               RDBS#
                          NoSQL$
  RDBS$
                         OLAP$/$BI$
               OLAP#/#
                 BI#     Hadoop$
Increasing Cost & Complexity
CAP Theorem
CAP Theorem

                                           Hypertable    HBase     BigTable    MongoDB

  RDBMS

                                             Redis      Memcache   Couchbase   Terrastore




          Dynamo   Voldemort   Cassandra




           Riak    SimpleDB    CouchDB
CAP Theorem

                                                           Dynamo   Voldemort   Cassandra

  RDBMS

                                                            Riak    SimpleDB    CouchDB




    Which one should I choose?

          Hypertable    HBase     BigTable    MongoDB



            Redis      Memcache   Couchbase   Terrastore
NoSQL Categories


 Key-Value   Column   Document   Graph
Welcome to Polyglot persistence
Key-Value Stores
Key-value stores
‣Based on Amazon’s Dynamo paper
‣Data stored as key / value pairs
‣Hard to query
‣Mostly in memory

                             K1   V1

                             K2   V2
                             K3   V2
‣Redis is an advanced key-value store
  ‣Similar to Memcached but the dataset is not
  volatile.
  ‣Data types: string, lists, sets, hashes, sorted
  sets
  ‣Data expiration
‣Master-slave replication
‣Has “transactions” (batch operations)
‣Libraries - Many languages (Java: Jedis,
JRedis...)
Redis Quick Demo
Column stores
Column stores
Based on Bigtable paper
Data model: big table with column
families
Document store
Table / Documents


                    { title: "Taming NoSQL with Spring
                    Data",
                       abstract: "NoSQL is taking a
                    leading ...",
                       speaker: "Sergi Almar",
                       topics: ["nosql", "spring"]}
Documents
       {
      
      amount: 33,
      
      currency: "EUR",
      
      user: {
      
      
        first_name: "Sergi",
      
      
        last_name: "Almar"
      
      },
      
      payment : {
      
      
        cc: "2342",
      
      
        expiracy: "11/12"
      
      },
      
      fingerprints : [{ index: "right_index", score:
      94},
      
      
            { index: "right_middle", score:
      89}]
        }
‣JSON-style documents
‣Full or partial document updates
‣GridFS for efficiently storing large files
‣Index support - secondary and
compound
‣Rich query language for dynamic queries
‣Map / Reduce
‣Replication and auto sharding
RDBMS               MongoDB
•   Table           • Collection
•   Row             • JSON Document
•   Index           • Index
•   Join            • Embedding &
•   Partition       Linking
•   Partition Key   • Shard
                    • Shard Key
MongoDB Quick Demo
Graph stores
‣DB is a collection of graph nodes,
relationships
  ‣Nodes and relationships have properties
‣Query is done via a traversal API
‣Indexes on node / relationship
properties
‣Written in Java, can be embedded
‣Transactions (ACID)
Spring Data
Spring Data         http://www.springsource.com/spring-
                    data

‣An umbrella project for:
‣JPA - Repositories
‣JDBC Extensions
‣MongoDB - Document Database
‣Neo4J - Graph Database
‣Redis, Riak - Key Value Database
‣Gemfire - Distributes Data Grid
‣Hadoop / HBase - Big Data Storage and
Analysis platform
Spring Data Building Blocks
‣Mapping of POJOs to underlying data
model
‣Familiar Spring ‘Template’
            ‣MongoTemplate,
            RedisTemplate,
            Neo4JTemplate...
‣Generic Repository support
Spring Data Repositories I
public'interface'Repository<T,'ID'extends'Serializable>'{'
!
}

public'interface'CrudRepository<T,'ID'extends'Serializable>'extends'Repository<T,'ID>'{'
!
''T'save(T'entity);'
'
''Iterable<T>'save(Iterable<?'extends'T>'entities);'
'
''T'findOne(ID'id);'
!
''boolean'exists(ID'id);'
!
''Iterable<T>'findAll();'
!
''long'count();'
!
''void'delete(ID'id);'
!
''void'delete(T'entity);'
'
''void'delete(Iterable<?'extends'T>'entities);'
!
''void'deleteAll();'
}
Spring Data Repositories II
public'interface'PagingAndSortingRepository<T,'ID'extends'Serializable>'extends''
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''CrudRepository<T,'ID>'{'
''Iterable<T>'findAll(Sort'sort);'
'
''Page<T>'findAll(Pageable'pageable);'
}




public'interface'PersonRepository'extends'CrudRepository<Person,BigInteger>'{'
'
'//'Finder'for'a'single'entity'
'Person'findByEmailAddress(String'emailAddress);'
'
'//'Finder'for'multiple'entities'
'List<Person>'findByLastnameLike(String'lastName);'
'
'//'Finder'with'pagination'
'Page<Person>'findByFirstnameLike(String'firstName,'Pageable'page);'
''
}
Spring Data JPA I
@Entity'
public'class'Person'{'
'
''@Id'
''@GeneratedValue(strategy=GenerationType.AUTO)&
''private'BigInteger'id;'
''private'String'firstname,'lastname;'
'
''@Column(name="email")'
''private'String'emailAddress;'
'
''@OneToMany'
''private'Set<Person>'colleagues;'
'
}


By just defining the interface, Spring provides the implementation

<jpa:repositories,base.package="com.java2days.repository"2/>!
Spring Data JPA II
‣Query methods use method naming
conventions
   ‣   Can override with Query annotation
   ‣ Or method name references a JPA named
public'interface'PersonRepository'extends'CrudRepository<Person,BigInteger>'{'
'
'//'previous'methods'omitted…'
                                             query
'
!@Query("select!p!from!Person!p!where!p.emailAddress!=!?1")!
!Person!findByEmailAddress(String!emailAddress);!
!!!
!@Query("select!p!from!Person!p!where!p.firstname!=!:firstname!or!p.lastname!=!:lastname")!
!Person!findByLastnameOrFirstname(@Param("lastname")!String!lastname,!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!@Param("firstname")!String!firstname);'
''
}
Spring Data Key-Value


Key-Value   Column   Document     Graph




                        MongoDB
Spring Data
‣MongoTemplate
‣Object-Document Mapping
‣Repository Support
‣QueryDSL
‣JMX
‣Logging
‣GeoSpatial
‣Spring XML namespace
Spring Data MongoDB - Entity Mapping
Spring Data MongoTemplate
Spring MongoDB Template usage
Spring Data MongoDB Repository




{ 'location' : { '$near' : [point.x, point.y], '$maxDistance' : distance}}
public'interface'PersonRepository''
'''''''extends'PagingAndSortingRepository'<Person,String>'{''
'
''List<Person>'findByLastName(String'lastName);''
''List<Person>'findByFirstName(String'lastName);'
''List<Person>'findByByShippingAdresses(Address'address);'
''List<Person>'findByByFirstNameAndLastName(String'fn,'String'ln);''
''List<Person>'findByByFirstNameAndLastName(String'fn,'String'ln,'PageRequest'pagingInfo);'
}'
public'interface'PersonRepository''
'''''''extends'PagingAndSortingRepository'<Person,String>'{''
'
''List<Person>'findByLastName(String'lastName);''
''List<Person>'findByFirstName(String'lastName);'
''List<Person>'findByByShippingAdresses(Address'address);'
''List<Person>'findByByFirstNameAndLastName(String'fn,'String'ln);''
''List<Person>'findByByFirstNameAndLastName(String'fn,'String'ln,'PageRequest'pagingInfo);'
}'



Keyword         Sample                                  Logical result
GreaterThan     findByAgeGreaterThan(int age)           {"age" : {"$gt" : age}}

LessThan        findByAgeLessThan(int age)              {"age" : {"$lt" : age}}

Between         findByAgeBetween(int from, int to)      {"age" : {"$gt" : from, "$lt" : to}}

NotNull         findByFirstnameNotNull()                {”firstname" : {"$ne" : null}}

Null            findByFirstnameNull()                   {”firstname" : null}

Like            findByFirstnameLike(String name)        "firstname" : firstname} (regex)
Spring Data Mongo Repository usage
Spring Data Key-Value


Key-Value   Column   Document   Graph




 Redis,
 Riak
Spring Data Redis
‣Portable API across several Redis connectors
‣RedisTemplate
  ‣Access all Redis functionality, dedicated interfaces
  for each data type
     ‣Value / Hash / Set / ZSet / List Operations
     ‣Handles serialization and type conversion automatically
     ‣String specific class through StringRedisTemplate (JSON,
     XML...)
  ‣Fluent Query API
‣Async Pub / Sub support with MLC
‣Spring 3.1 Cache Abstraction provider
Redis Configuration (Jedis connector)

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/
beans/spring-beans.xsd

<bean id="jedisConnectionFactory"
      class="org.springframework.data.keyvalue.redis.connection.jedis.JedisConnect
      p:use-pool="true"
      p:host-name="server"
      p:port="6379"
/>

<!-- redis template definition -->
<bean id="redisTemplate"
      class="org.springframework.data.keyvalue.redis.core.RedisTemplate"
      p:connection-factory-ref="jedisConnectionFactory"/>
...
</beans>
Using RedisTemplate



redisTemplate.opsForValue().get(“user:salmar:transactions”);
redisTemplate.opsForValue().set(“user:salmar:transactions”, 20);

redisTemplate.opsForValue().increment(“user:salmar:transactions”, 1);

redisTemplate.opsForSets().add(“user:salmar:friends”, “jlong”);
redisTemplate.opsForSets().intersect(“user:salmar:friends”, “user.jlong:friends”);
Thank you!
     Q&A
  @sergialmar

Más contenido relacionado

La actualidad más candente

CouchDB – A Database for the Web
CouchDB – A Database for the WebCouchDB – A Database for the Web
CouchDB – A Database for the WebKarel Minarik
 
Scaling ArangoDB on Mesosphere DCOS
Scaling ArangoDB on Mesosphere DCOSScaling ArangoDB on Mesosphere DCOS
Scaling ArangoDB on Mesosphere DCOSMax Neunhöffer
 
Experience with C++11 in ArangoDB
Experience with C++11 in ArangoDBExperience with C++11 in ArangoDB
Experience with C++11 in ArangoDBMax Neunhöffer
 
Transitioning from SQL to MongoDB
Transitioning from SQL to MongoDBTransitioning from SQL to MongoDB
Transitioning from SQL to MongoDBMongoDB
 
MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...
MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...
MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...MongoDB
 
Webinar: How native multi model works in ArangoDB
Webinar: How native multi model works in ArangoDBWebinar: How native multi model works in ArangoDB
Webinar: How native multi model works in ArangoDBArangoDB Database
 
OSCON 2011 Learning CouchDB
OSCON 2011 Learning CouchDBOSCON 2011 Learning CouchDB
OSCON 2011 Learning CouchDBBradley Holt
 
Polygot persistence for Java Developers - August 2011 / @Oakjug
Polygot persistence for Java Developers - August 2011 / @OakjugPolygot persistence for Java Developers - August 2011 / @Oakjug
Polygot persistence for Java Developers - August 2011 / @OakjugChris Richardson
 
Updates from Cassandra Summit 2016 & SASI Indexes
Updates from Cassandra Summit 2016 & SASI IndexesUpdates from Cassandra Summit 2016 & SASI Indexes
Updates from Cassandra Summit 2016 & SASI IndexesJim Hatcher
 
MongoDB as a fast and queryable cache
MongoDB as a fast and queryable cacheMongoDB as a fast and queryable cache
MongoDB as a fast and queryable cacheMongoDB
 
Basics of MongoDB
Basics of MongoDB Basics of MongoDB
Basics of MongoDB Habilelabs
 
Introduction to Foxx by our community member Iskandar Soesman @ikandars
Introduction to Foxx by our community member Iskandar Soesman @ikandarsIntroduction to Foxx by our community member Iskandar Soesman @ikandars
Introduction to Foxx by our community member Iskandar Soesman @ikandarsArangoDB Database
 
5 Ways to Use Spark to Enrich your Cassandra Environment
5 Ways to Use Spark to Enrich your Cassandra Environment5 Ways to Use Spark to Enrich your Cassandra Environment
5 Ways to Use Spark to Enrich your Cassandra EnvironmentJim Hatcher
 

La actualidad más candente (20)

CouchDB – A Database for the Web
CouchDB – A Database for the WebCouchDB – A Database for the Web
CouchDB – A Database for the Web
 
Scaling ArangoDB on Mesosphere DCOS
Scaling ArangoDB on Mesosphere DCOSScaling ArangoDB on Mesosphere DCOS
Scaling ArangoDB on Mesosphere DCOS
 
Experience with C++11 in ArangoDB
Experience with C++11 in ArangoDBExperience with C++11 in ArangoDB
Experience with C++11 in ArangoDB
 
CouchDB
CouchDBCouchDB
CouchDB
 
CouchDB
CouchDBCouchDB
CouchDB
 
Transitioning from SQL to MongoDB
Transitioning from SQL to MongoDBTransitioning from SQL to MongoDB
Transitioning from SQL to MongoDB
 
MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...
MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...
MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...
 
Webinar: How native multi model works in ArangoDB
Webinar: How native multi model works in ArangoDBWebinar: How native multi model works in ArangoDB
Webinar: How native multi model works in ArangoDB
 
Deep Dive on ArangoDB
Deep Dive on ArangoDBDeep Dive on ArangoDB
Deep Dive on ArangoDB
 
OSCON 2011 Learning CouchDB
OSCON 2011 Learning CouchDBOSCON 2011 Learning CouchDB
OSCON 2011 Learning CouchDB
 
CouchDB
CouchDBCouchDB
CouchDB
 
Polygot persistence for Java Developers - August 2011 / @Oakjug
Polygot persistence for Java Developers - August 2011 / @OakjugPolygot persistence for Java Developers - August 2011 / @Oakjug
Polygot persistence for Java Developers - August 2011 / @Oakjug
 
Updates from Cassandra Summit 2016 & SASI Indexes
Updates from Cassandra Summit 2016 & SASI IndexesUpdates from Cassandra Summit 2016 & SASI Indexes
Updates from Cassandra Summit 2016 & SASI Indexes
 
Mongo DB Presentation
Mongo DB PresentationMongo DB Presentation
Mongo DB Presentation
 
MongoDB as a fast and queryable cache
MongoDB as a fast and queryable cacheMongoDB as a fast and queryable cache
MongoDB as a fast and queryable cache
 
Basics of MongoDB
Basics of MongoDB Basics of MongoDB
Basics of MongoDB
 
Introduction to Foxx by our community member Iskandar Soesman @ikandars
Introduction to Foxx by our community member Iskandar Soesman @ikandarsIntroduction to Foxx by our community member Iskandar Soesman @ikandars
Introduction to Foxx by our community member Iskandar Soesman @ikandars
 
Introduction to PalDB
Introduction to PalDBIntroduction to PalDB
Introduction to PalDB
 
Couch db
Couch dbCouch db
Couch db
 
5 Ways to Use Spark to Enrich your Cassandra Environment
5 Ways to Use Spark to Enrich your Cassandra Environment5 Ways to Use Spark to Enrich your Cassandra Environment
5 Ways to Use Spark to Enrich your Cassandra Environment
 

Destacado

Spring Data com MongoDB
Spring Data com MongoDBSpring Data com MongoDB
Spring Data com MongoDBFabiano Modos
 
The Spring Data MongoDB Project
The Spring Data MongoDB ProjectThe Spring Data MongoDB Project
The Spring Data MongoDB ProjectMongoDB
 
Using Spring with NoSQL databases (SpringOne China 2012)
Using Spring with NoSQL databases (SpringOne China 2012)Using Spring with NoSQL databases (SpringOne China 2012)
Using Spring with NoSQL databases (SpringOne China 2012)Chris Richardson
 
NoSQL Database- cassandra column Base DB
NoSQL Database- cassandra column Base DBNoSQL Database- cassandra column Base DB
NoSQL Database- cassandra column Base DBsadegh salehi
 
jDays - Spring Boot under the Hood
jDays - Spring Boot under the HoodjDays - Spring Boot under the Hood
jDays - Spring Boot under the HoodNicolas Fränkel
 
Microservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring CloudMicroservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring CloudEberhard Wolff
 
Spring boot
Spring bootSpring boot
Spring bootsdeeg
 

Destacado (7)

Spring Data com MongoDB
Spring Data com MongoDBSpring Data com MongoDB
Spring Data com MongoDB
 
The Spring Data MongoDB Project
The Spring Data MongoDB ProjectThe Spring Data MongoDB Project
The Spring Data MongoDB Project
 
Using Spring with NoSQL databases (SpringOne China 2012)
Using Spring with NoSQL databases (SpringOne China 2012)Using Spring with NoSQL databases (SpringOne China 2012)
Using Spring with NoSQL databases (SpringOne China 2012)
 
NoSQL Database- cassandra column Base DB
NoSQL Database- cassandra column Base DBNoSQL Database- cassandra column Base DB
NoSQL Database- cassandra column Base DB
 
jDays - Spring Boot under the Hood
jDays - Spring Boot under the HoodjDays - Spring Boot under the Hood
jDays - Spring Boot under the Hood
 
Microservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring CloudMicroservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring Cloud
 
Spring boot
Spring bootSpring boot
Spring boot
 

Similar a Taming NoSQL with Spring Data

NoSQL: Why, When, and How
NoSQL: Why, When, and HowNoSQL: Why, When, and How
NoSQL: Why, When, and HowBigBlueHat
 
Introduction to NoSql
Introduction to NoSqlIntroduction to NoSql
Introduction to NoSqlOmid Vahdaty
 
DynamoDB Gluecon 2012
DynamoDB Gluecon 2012DynamoDB Gluecon 2012
DynamoDB Gluecon 2012Appirio
 
Gluecon 2012 - DynamoDB
Gluecon 2012 - DynamoDBGluecon 2012 - DynamoDB
Gluecon 2012 - DynamoDBJeff Douglas
 
Spring one2gx2010 spring-nonrelational_data
Spring one2gx2010 spring-nonrelational_dataSpring one2gx2010 spring-nonrelational_data
Spring one2gx2010 spring-nonrelational_dataRoger Xia
 
Big Data with SQL Server
Big Data with SQL ServerBig Data with SQL Server
Big Data with SQL ServerMark Kromer
 
Solutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Solutions for bi-directional integration between Oracle RDBMS & Apache KafkaSolutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Solutions for bi-directional integration between Oracle RDBMS & Apache KafkaGuido Schmutz
 
MongoDB - Ruby document store that doesn't rhyme with ouch
MongoDB - Ruby document store that doesn't rhyme with ouchMongoDB - Ruby document store that doesn't rhyme with ouch
MongoDB - Ruby document store that doesn't rhyme with ouchWynn Netherland
 
Hybrid MongoDB and RDBMS Applications
Hybrid MongoDB and RDBMS ApplicationsHybrid MongoDB and RDBMS Applications
Hybrid MongoDB and RDBMS ApplicationsSteven Francia
 
No sql solutions - 공개용
No sql solutions - 공개용No sql solutions - 공개용
No sql solutions - 공개용Byeongweon Moon
 
Big Data in the Real World
Big Data in the Real WorldBig Data in the Real World
Big Data in the Real WorldMark Kromer
 
Solutions for bi-directional Integration between Oracle RDMBS & Apache Kafka
Solutions for bi-directional Integration between Oracle RDMBS & Apache KafkaSolutions for bi-directional Integration between Oracle RDMBS & Apache Kafka
Solutions for bi-directional Integration between Oracle RDMBS & Apache KafkaGuido Schmutz
 
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...confluent
 
Cassandra Explained
Cassandra ExplainedCassandra Explained
Cassandra ExplainedEric Evans
 
Beyond Relational
Beyond RelationalBeyond Relational
Beyond RelationalLynn Langit
 
JS App Architecture
JS App ArchitectureJS App Architecture
JS App ArchitectureCorey Butler
 
HPTS 2011: The NoSQL Ecosystem
HPTS 2011: The NoSQL EcosystemHPTS 2011: The NoSQL Ecosystem
HPTS 2011: The NoSQL EcosystemAdam Marcus
 
The NoSQL Ecosystem
The NoSQL Ecosystem The NoSQL Ecosystem
The NoSQL Ecosystem yarapavan
 

Similar a Taming NoSQL with Spring Data (20)

NoSQL: Why, When, and How
NoSQL: Why, When, and HowNoSQL: Why, When, and How
NoSQL: Why, When, and How
 
Introduction to NoSql
Introduction to NoSqlIntroduction to NoSql
Introduction to NoSql
 
DynamoDB Gluecon 2012
DynamoDB Gluecon 2012DynamoDB Gluecon 2012
DynamoDB Gluecon 2012
 
Gluecon 2012 - DynamoDB
Gluecon 2012 - DynamoDBGluecon 2012 - DynamoDB
Gluecon 2012 - DynamoDB
 
Spring one2gx2010 spring-nonrelational_data
Spring one2gx2010 spring-nonrelational_dataSpring one2gx2010 spring-nonrelational_data
Spring one2gx2010 spring-nonrelational_data
 
Big Data with SQL Server
Big Data with SQL ServerBig Data with SQL Server
Big Data with SQL Server
 
Solutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Solutions for bi-directional integration between Oracle RDBMS & Apache KafkaSolutions for bi-directional integration between Oracle RDBMS & Apache Kafka
Solutions for bi-directional integration between Oracle RDBMS & Apache Kafka
 
MongoDB - Ruby document store that doesn't rhyme with ouch
MongoDB - Ruby document store that doesn't rhyme with ouchMongoDB - Ruby document store that doesn't rhyme with ouch
MongoDB - Ruby document store that doesn't rhyme with ouch
 
Hybrid MongoDB and RDBMS Applications
Hybrid MongoDB and RDBMS ApplicationsHybrid MongoDB and RDBMS Applications
Hybrid MongoDB and RDBMS Applications
 
מיכאל
מיכאלמיכאל
מיכאל
 
No sql solutions - 공개용
No sql solutions - 공개용No sql solutions - 공개용
No sql solutions - 공개용
 
MongoDB is the MashupDB
MongoDB is the MashupDBMongoDB is the MashupDB
MongoDB is the MashupDB
 
Big Data in the Real World
Big Data in the Real WorldBig Data in the Real World
Big Data in the Real World
 
Solutions for bi-directional Integration between Oracle RDMBS & Apache Kafka
Solutions for bi-directional Integration between Oracle RDMBS & Apache KafkaSolutions for bi-directional Integration between Oracle RDMBS & Apache Kafka
Solutions for bi-directional Integration between Oracle RDMBS & Apache Kafka
 
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...
Solutions for bi-directional integration between Oracle RDBMS and Apache Kafk...
 
Cassandra Explained
Cassandra ExplainedCassandra Explained
Cassandra Explained
 
Beyond Relational
Beyond RelationalBeyond Relational
Beyond Relational
 
JS App Architecture
JS App ArchitectureJS App Architecture
JS App Architecture
 
HPTS 2011: The NoSQL Ecosystem
HPTS 2011: The NoSQL EcosystemHPTS 2011: The NoSQL Ecosystem
HPTS 2011: The NoSQL Ecosystem
 
The NoSQL Ecosystem
The NoSQL Ecosystem The NoSQL Ecosystem
The NoSQL Ecosystem
 

Último

SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 

Último (20)

SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 

Taming NoSQL with Spring Data

Notas del editor

  1. \n
  2. \n
  3. Most popular persistence choice today\nRelations, ACID guarantees, SQL, strict schema, difficult to scale, mismatch with OO lang\n
  4. Online analytical processing that enable users to interactively analyze multidimensional data from multiple perspectives\n
  5. \n
  6. \n
  7. \nC &amp;#x2013; for &amp;#x201C;Consistency&amp;#x201D; :ability of a system to remain in consistent state after an update or an operation\nA &amp;#x2013; for &amp;#x201C;Availability&amp;#x201D; :&amp;#xA0;availability of a system even in the event of adversity or system issues\nP &amp;#x2013; for &amp;#x201C;Partition Tolerance&amp;#x201D; :&amp;#xA0;ability of system to function in presence of network partitions even if partitions are added/deletedYou can&apos;t have the three at the same time and get an acceptable latency.\nFast, good and cheap\nYou cannot scale without partition tolerance, so to scale you have to drop consistency\n\n
  8. Most of the systems compromise between consistency and availability\nBASE - Basic Availability Soft-state Eventual consistency\nYou drop consistency for eventual consistency\n\nFirst were web frameworks (Struts, Spring MVC, Tapestry, Wicket, Stripes...)\nThen Ajax and Javascript frameworks (jQuery, prototype, Dojo...) (backbone.js, Knokout, batman.js...)\nNot it&amp;#x2019;s time for persistence!!!\n
  9. \nWhich one should I use for my use case?\n
  10. Key-Value: like a globally distrubuted hasmap\nColumn: \n
  11. Relational Databases ACID Principles (Atomic, Consistent, Isolated, Durable)\nPolyglot Programming 2006\nScalability, High availability, fault tolerance, distributability, flexibility\n\n
  12. \n
  13. Dynamo: Amazon&amp;#x2019;s Highly available key-value store (2007)\nExtremely fast\nUse CasesSession data Shopping cartsUser preferences\n\nWhen to avoid?\nYou have relationsYou have multi-operational transactions \nYou want to query the valuesYou want to operate on sets of entries\n
  14. Atomic\nUse cases: Counting views, who is online, social activity feeds, caching\nContentious benchmarks (memcached vs redis)\n
  15. \n
  16. \n
  17. Based on Bigtable from Google: A Distributed storage system for Structured Data (2006)\nLike a big table where every row can have its own schema (one row may have 3 columns and another one 50 columns)\nBig Data problems, large scale data processing\n
  18. \n
  19. Easy to get started with\nSQL like query capabilities\nSchema less -no schema migration but cannot have data integrity\n
  20. Rich Document: Closer to the data model that we have in our code\nArray of values are much more convenient than many-to-many relationships\nEmbedded documents\n\n_id -&gt; PK globally unique identifier, you can override that value\n
  21. Eventual consistency\nGridFS - supports native storage of binary data\nObjects in MongoDB are limited in size, the GridFS spec provides a mechanism for transparently dividing a large file among multiple documents.\n
  22. \n
  23. 10gen nothing is gonna be more \n10gen education\nmost of the querying capabilities that you get with RDBSM, \n
  24. \n
  25. \n
  26. 3 core abstractions in the graph model: Node, Relationship, Properties (key-value pairs)\nSchema free\nOther dbs can model graphs, graph dbs make it the primary data structure.\n\n
  27. \n
  28. Spring Data makes it easier to build Spring-powered applications that use new data access technologies\nIt is worth taking a look at spring data even if you are not using nosql\nPromote classic Spring value propositions: \nProductivity (make the easy stuff a on-liner), \nconsistency: wide broad of APIs\nportability: repository support\nCommons: Repositories, Object Mapping\n
  29. QueryDSL project, type-safe query API\nfields managed by different stores\n
  30. \n
  31. Pageable -&gt;offset, page number, page size, sort (accepts multiple properties)\nQuery methods use method naming conventions to define query\n
  32. \n
  33. \n
  34. \n
  35. Foursquare - geospatial\n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n