SlideShare a Scribd company logo
1 of 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

More Related Content

What's hot

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
 

What's hot (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
 

Viewers also liked

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
 

Viewers also liked (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 to 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 to 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
 

Recently uploaded

[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesKari Kakkonen
 
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 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
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxfnnc6jmgwh
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...itnewsafrica
 
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
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Nikki Chapple
 
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
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observabilityitnewsafrica
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: 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
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Hiroshi SHIBATA
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsRavi Sanghani
 

Recently uploaded (20)

[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Testing tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examplesTesting tools and AI - ideas what to try with some tool examples
Testing tools and AI - ideas what to try with some tool examples
 
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 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
 
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptxGenerative AI - Gitex v1Generative AI - Gitex v1.pptx
Generative AI - Gitex v1Generative AI - Gitex v1.pptx
 
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...Zeshan Sattar- Assessing the skill requirements and industry expectations for...
Zeshan Sattar- Assessing the skill requirements and industry expectations for...
 
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
 
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
Microsoft 365 Copilot: How to boost your productivity with AI – Part one: Ado...
 
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
 
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security ObservabilityGlenn Lazarus- Why Your Observability Strategy Needs Security Observability
Glenn Lazarus- Why Your Observability Strategy Needs Security Observability
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: 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
 
Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024Long journey of Ruby standard library at RubyConf AU 2024
Long journey of Ruby standard library at RubyConf AU 2024
 
Potential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and InsightsPotential of AI (Generative AI) in Business: Learnings and Insights
Potential of AI (Generative AI) in Business: Learnings and Insights
 

Taming NoSQL with Spring Data

Editor's Notes

  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