SlideShare a Scribd company logo
NoSQL Endgame
Thodoris Bais
Werner Keil
Otavio Santana
Werner Keil Thodoris Bais
Jakarta EE Specification Committee Member Expert Group Member JSR-385
Let’s meet
@thodorisbais
@wernerkeil
Otavio Santana
Distinguished Software Engineer, Zup Innovation
Let’s meet
@otaviojava
4
5 trends in 2021
New digital trends create new technical
challenges
@thodorisbais
@wernerkeil
What are these challenges?
@thodorisbais
@wernerkeil
• Agile development process
• High performance and availability
• Manage huge data volumes
NoSQL FTW!
Advantages of NoSQL
@thodorisbais
@wernerkeil
• Handles large volumes of data at high-speed
• Stores unstructured, semi-structured, or structured data
• Easy updates to schemas and fields
• Developer-friendly
• Takes advantage of the cloud to deliver zero downtime
Why this talk
Tons of persistence frameworks
Which one performs best for your case?
JVM can cope with heavy loads
Would normally take ages to compare
NoSQL
01 Database
02 Doesn't use (semi)structure
03 No transactions
04 BASE
Four different types
05
Key-Value stores
AmazonS3
Apollo
Ares
Aphrodite
Sun
War
Love Beauty
AmazonDynamo
Hazelcast
Redis
Column-Oriented
Apollo
Aphrodite
Ares
Kratos
Duty
Duty
Duty
Dead Gods
Love, happy
Sun
War
13
Color
weapon
Sword
Row-key Columns
HBase
Scylla
SimpleDB
Cassandra
DynamoDB
Clouddata
Document stores
{
"name":"Diana",
"duty":[
"Hunt",
"Moon",
"Nature"
],
"siblings":{
"Apollo":"brother"
}
}
ApacheCouchDB
MongoDB
Couchbase
Graph databases
Apollo Ares
Kratos
was killed by was killed by
killed killed
Neo4j
InfoGrid
Sones
HyperGraphDB
Multi-Model
01
02
03
04
OrientDB (graph, document)
Couchbase (key value, document)
Elasticsearch (document, graph)
ArangoDB (document, graph, key-value)
SQL vs NoSQL
SQL KEY-VALUE COLUMN DOCUMENTS GRAPH
Table Bucket Column family Collection
Row Key/value pair Column Documents Vertex
Column Key/value pair Key/value pair Vertex and
Edge property
Relationship Link Edge
BASE vs ACID
• Basically Available
• Soft state
• Eventual consistency
• Atomicity
• Consistency
• Isolation
• Durability
CAP
Scalability vs Complexity
Scalability
Complexity
key-value
Column
Document
Graph
Relational Application NoSQL Application
Logic Tier Logic Tier
DAO DAO
JPA
JPA
JPA
JPA
JDBC JDBC
JDBC
JDBC
Data Tier
API
API API
Data Tier
Our comparison model
JPA problem for NoSQL
01
02
03
04
05
06
Saves Async
Async Callback
Time to Live (TTL)
Consistency Level
SQL based
Diversity in NoSQL
Annotated Entities
01
02
03
Mapped Superclass
Entity
Column
@Entity("god")
public class God {
@Column
private String name;
@Column
private long age;
@Column
private Set<String> powers;
}
Template
God artemis = ...;
DocumentTemplate template = …
template.insert(artemis);
template.update(artemis);
DocumentQuery query = ...
List<God> gods = template.select(query);
Repository
interface GodRepository extends MongoRepository<God, String> {
List<God> findByNameAndAge (String name, Integer age);
}
Repository
@Inject
@Database(DatabaseType.COLUMN)
private GodRepository godRepository;
@Inject
@Database(DatabaseType.KEY_VALUE)
private GodRepository godRepository;
Repository with Queries
interface PersonRepository extends Repository<Person, Long> {
@Query("select * from Person")
Optional<Person> findByQuery();
@Query("select * from Person where id = @id")
Optional<Person> findByQuery(@Param("id") String id);
}
List<Movie> movies = documentTemplate.query("select * from Movie
where year > 2012");
List<Person> people = columnTemplate.query("select * from Person
where age = 25");
Optional<God> god = keyValueTemplate.query("get 'Ullr'");
List<City> cities = graphTemplate.query("g.V().hasLabel('City')");
Query by Text
Micronaut Data
NoSQL?
Repository
public class AnimalRepository {
List<Animal> findByType(String type) {…}
public Animal insert(Animal animal) {…}
}
Entity
public class City {
private String name;
public City(String name) {
this.name = name;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
Query by Text
public void save(City city) {
try (Session s = driver.session()) {
String statement = "MERGE (c:City {id:$name.id}) ON CREATE SET c+=$name";
s.writeTransaction(tx -> tx.run(statement, singletonMap("name" ,city.asMap())));
}
}
public Stream<City> findByName(String name) {
try (Session s = driver.session()) {
String statement = "MATCH (c:City) WHERE c.name contains $name RETURN c";
return s.readTransaction(tx -> tx.run(statement, singletonMap("name", name)))
.list(record -> new City(record.get("c").asMap())).stream();
}
}
GORM
NoSQL?
Entity
@Entity
class User {
ObjectId id
String emailAddress
String password
String fullname
Date dateCreated
Date lastUpdated
static constraints = {
emailAddress email: true
password nullable: true
fullname blank: false
}
}}
@Document(collection = "gods")
public class God { … }
interface GodRepository extends
MongoRepository<God, String> { … }
What about the Controller?
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
spring.data.mongodb.database=mythology
spring.data.mongodb.port=27017
Logistics Domain
Our example
MovieEntity
MovieRepository
PersonEntity
Roles
…
Other reactive dependencies
…
<dependency>
<groupId>org.neo4j.springframework.data</groupId>
<artifactId>spring-data-neo4j-rx-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
org.neo4j.driver.uri=bolt://localhost:7687
org.neo4j.driver.authentication.username=neo4j
org.neo4j.driver.authentication.password=secret
Logistics Domain
Entities
@Node("Person")
public class PersonEntity {
@Id
private final String name;
private final Integer born;
}
@Node("Movie")
public class MovieEntity {
@Id
private final String title;
@Property("tagline")
private final String description;
@Relationship(type = "ACTED_IN", direction = INCOMING)
private Map<PersonEntity, Roles> actorsAndRoles =
new HashMap<>();
@Relationship(type = "DIRECTED", direction = INCOMING)
private List<PersonEntity> directors = new ArrayList<>();
}
Repository
public interface MovieRepository extends
ReactiveNeo4jRepository<MovieEntity, String> {
Mono<MovieEntity> findOneByTitle(String title);
}
Relationships
@RelationshipProperties
public class Roles {
private final List<String> roles;
public Roles(List<String> roles) {
this.roles = roles;
}
}
What happened to
?
Entity
@Entity
public class Editor {
@Id
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
private String editorId;
private String editorName;
@OneToMany(mappedBy = "editor", cascade = CascadeType.PERSIST)
private Set<Author> assignedAuthors = new HashSet<>();
// constructors, getters and setters...
}
Operations
private void persistTestData(EntityManagerFactory entityManagerFactory, Editor editor)
throws Exception {
TransactionManager transactionManager =
com.arjuna.ats.jta.TransactionManager.transactionManager();
transactionManager.begin();
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.persist(editor);
entityManager.close();
transactionManager.commit();
}
Warning
“In most cases, multi-document transaction incurs a greater
performance cost over single document writes, and the availability of
multi-document transactions should not be a replacement for
effective schema design. For many scenarios, the denormalized data
model (embedded documents and arrays) will continue to be optimal
for your data and use cases. That is, for many scenarios, modeling
your data appropriately will minimize the need for multi-document
transactions.”
Documentation
Conclusions
NoSQL Endgame
@thodorisbais
@wernerkeil
Conclusions
Still in Progress ❌
Supports a huge number of NoSQL database systems ✅
Loosely coupled code makes switching between
different NoSQL vendors just a matter of configuration
✅
Removes boiler-plate code and provides a cleaner,
more readable DAO
✅
Conclusions
Switching between different NoSQL vendors not so easy ❌
Micronaut Data does not support NoSQL databases yet ❌
Still in Progress ❌
Often faster with a lower footprint and polyglot language
support for Java, Kotlin and Groovy
✅
Conclusions
Provides a cleaner and more readable DAO implementation ✅
Works with Grails, Micronaut or Spring Boot, polyglot
language support for Java and Groovy
✅
Removes a lot of boiler-plate code ✅
Only 3 to 4 of the most popular NoSQL databases are supported
out of the box, others require more effort or won’t work yet ❌
Conclusions
Provides a cleaner and more readable DAO implementation ✅
Loosely coupled code makes switching between
different NoSQL vendors just a matter of configuration
✅
Removes a lot of boiler-plate code ✅
Only a few popular NoSQL databases are supported out of the
box at this moment ❌
Conclusions
Using a mapper for all scenarios is not a
recommended approach
❌
Some JPA concepts are not easily mapped to
the NoSQL world (e.g. transactions)
❌
No error-safe way to run the query language and hydrate DTOs
from the result ❌
Outdated, no release since 2018 ❌
▪ GitHub repositories
▪ https://github.com/JNOSQL/nosql-endgame
▪ Project page
▪ http://jnosql.org
@thodorisbais
@wernerkeil
Links
5
3
• Flaticon.com
• Michael Simons
• Jean Tessier
Credits
@thodorisbais
@wernerkeil
Thank you

More Related Content

PPTX
NoSQL Endgame DevoxxUA Conference 2020
PPTX
OrientDB vs Neo4j - and an introduction to NoSQL databases
PPTX
Open Source 1010 and Quest InSync presentations March 30th, 2021 on MySQL Ind...
PPTX
NoSQL Endgame JCON Conference 2020
PPTX
Moving from SQL Server to MongoDB
PDF
FITC presents: Mobile & offline data synchronization in Angular JS
PDF
Electron, databases, and RxDB
PPTX
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...
NoSQL Endgame DevoxxUA Conference 2020
OrientDB vs Neo4j - and an introduction to NoSQL databases
Open Source 1010 and Quest InSync presentations March 30th, 2021 on MySQL Ind...
NoSQL Endgame JCON Conference 2020
Moving from SQL Server to MongoDB
FITC presents: Mobile & offline data synchronization in Angular JS
Electron, databases, and RxDB
Benefits of Using MongoDB Over RDBMS (At An Evening with MongoDB Minneapolis ...

What's hot (20)

PPTX
Couchbase Data Platform | Big Data Demystified
PPS
MongoDB crud
PPTX
Updates from Cassandra Summit 2016 & SASI Indexes
PPTX
NoSQL Introduction
PPTX
The CIOs Guide to NoSQL
PPTX
Mongodb - NoSql Database
PDF
MySQL without the SQL -- Cascadia PHP
PDF
OrientDB introduction - NoSQL
ODP
PPTX
Document validation in MongoDB 3.2
ODP
Mongo indexes
PDF
Migrating from RDBMS to MongoDB
PPTX
Tuning and Debugging in Apache Spark
PPT
NoSql Databases
PPTX
Data Management 3: Bulletproof Data Management
PDF
MongoDB .local Chicago 2019: Practical Data Modeling for MongoDB: Tutorial
PDF
MySQL 8 Server Optimization Swanseacon 2018
PPTX
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy Nguyen
PDF
Combine Spring Data Neo4j and Spring Boot to quickl
PPTX
5 Ways to Use Spark to Enrich your Cassandra Environment
Couchbase Data Platform | Big Data Demystified
MongoDB crud
Updates from Cassandra Summit 2016 & SASI Indexes
NoSQL Introduction
The CIOs Guide to NoSQL
Mongodb - NoSql Database
MySQL without the SQL -- Cascadia PHP
OrientDB introduction - NoSQL
Document validation in MongoDB 3.2
Mongo indexes
Migrating from RDBMS to MongoDB
Tuning and Debugging in Apache Spark
NoSql Databases
Data Management 3: Bulletproof Data Management
MongoDB .local Chicago 2019: Practical Data Modeling for MongoDB: Tutorial
MySQL 8 Server Optimization Swanseacon 2018
Grokking Engineering - Data Analytics Infrastructure at Viki - Huy Nguyen
Combine Spring Data Neo4j and Spring Boot to quickl
5 Ways to Use Spark to Enrich your Cassandra Environment
Ad

Similar to EclipseCon 2021 NoSQL Endgame (20)

PPTX
NoSQL Endgame - Java2Days 2020 Virtual
PPTX
NoSQL Endgame LWJUG 2021
PPTX
JakartaData-JCon.pptx
PPTX
Optimizing Application Architecture (.NET/Java topics)
PPTX
NoSQL Endgame Percona Live Online 2020
PPTX
Evolution of the DBA to Data Platform Administrator/Specialist
PPTX
Autogenerate Awesome GraphQL Documentation with SpectaQL
PDF
Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...
PDF
Vital AI MetaQL: Queries Across NoSQL, SQL, Sparql, and Spark
PPTX
Being RDBMS Free -- Alternate Approaches to Data Persistence
PPT
NO SQL: What, Why, How
PPTX
Introduction to NoSQL Database
PDF
Rails israel 2013
PDF
Wrangling data like a boss
PDF
Considerations for using NoSQL technology on your next IT project - Akmal Cha...
PDF
Introduction to Graph databases and Neo4j (by Stefan Armbruster)
PPTX
Introduction to Azure DocumentDB
PDF
MySQL Document Store for Modern Applications
PDF
Azure Fundamentals.pdf
PPTX
Migrating on premises workload to azure sql database
NoSQL Endgame - Java2Days 2020 Virtual
NoSQL Endgame LWJUG 2021
JakartaData-JCon.pptx
Optimizing Application Architecture (.NET/Java topics)
NoSQL Endgame Percona Live Online 2020
Evolution of the DBA to Data Platform Administrator/Specialist
Autogenerate Awesome GraphQL Documentation with SpectaQL
Simon Elliston Ball – When to NoSQL and When to Know SQL - NoSQL matters Barc...
Vital AI MetaQL: Queries Across NoSQL, SQL, Sparql, and Spark
Being RDBMS Free -- Alternate Approaches to Data Persistence
NO SQL: What, Why, How
Introduction to NoSQL Database
Rails israel 2013
Wrangling data like a boss
Considerations for using NoSQL technology on your next IT project - Akmal Cha...
Introduction to Graph databases and Neo4j (by Stefan Armbruster)
Introduction to Azure DocumentDB
MySQL Document Store for Modern Applications
Azure Fundamentals.pdf
Migrating on premises workload to azure sql database
Ad

More from Thodoris Bais (20)

PDF
You Graduated Now What ECE UoWM 2021
PDF
Be the Leader of Your Own Career Global Summit for Java Devs 21
PDF
How to grow an amazing community - JavaLand 2021
PPTX
Securing eHealth, eGovernment and eBanking with Java - IT-Tage 2020 Conference
PPTX
Securing eHealth, eGovernment and eBanking with Java - JCON Conference
PDF
Be the Leader of Your Own Career JCON Conference 2020
PPTX
Utrecht JUG meetup September 2020
PPTX
How JSR 385 could have Saved the Mars Climate Orbiter Java Global Summit 2020
PDF
Developer Career: Own it - SouJava April 2020
PPTX
Securing eHealth and eGovernment with Java - AllTheTalksOnline 2020
PDF
How to pitch an innovative idea in a corporate environment
PPTX
Utrecht JUG meetup February 2020
PDF
Developer Career: Own it - Adorsys 2020
PDF
How JSR 385 could have Saved the Mars Climate Orbiter Adorsys 2020
PPTX
Utrecht JUG Meetup January 2020
PDF
Developer Career: Own it - Java2Days 2019
PPTX
Securing eHealth and eGovernment with Java - Java2Days 2019
PPTX
Utrecht JUG meetup December 2019 Speaker Incubator
PDF
How JSR 385 could have Saved the Mars Climate Orbiter DevoxxUA 2019
PDF
How JSR 385 could have Saved the Mars Climate Orbiter JFall 2019
You Graduated Now What ECE UoWM 2021
Be the Leader of Your Own Career Global Summit for Java Devs 21
How to grow an amazing community - JavaLand 2021
Securing eHealth, eGovernment and eBanking with Java - IT-Tage 2020 Conference
Securing eHealth, eGovernment and eBanking with Java - JCON Conference
Be the Leader of Your Own Career JCON Conference 2020
Utrecht JUG meetup September 2020
How JSR 385 could have Saved the Mars Climate Orbiter Java Global Summit 2020
Developer Career: Own it - SouJava April 2020
Securing eHealth and eGovernment with Java - AllTheTalksOnline 2020
How to pitch an innovative idea in a corporate environment
Utrecht JUG meetup February 2020
Developer Career: Own it - Adorsys 2020
How JSR 385 could have Saved the Mars Climate Orbiter Adorsys 2020
Utrecht JUG Meetup January 2020
Developer Career: Own it - Java2Days 2019
Securing eHealth and eGovernment with Java - Java2Days 2019
Utrecht JUG meetup December 2019 Speaker Incubator
How JSR 385 could have Saved the Mars Climate Orbiter DevoxxUA 2019
How JSR 385 could have Saved the Mars Climate Orbiter JFall 2019

Recently uploaded (20)

PDF
Chapter 3 Spatial Domain Image Processing.pdf
PPTX
Big Data Technologies - Introduction.pptx
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
PDF
Approach and Philosophy of On baking technology
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Unlocking AI with Model Context Protocol (MCP)
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PDF
NewMind AI Monthly Chronicles - July 2025
PDF
KodekX | Application Modernization Development
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Modernizing your data center with Dell and AMD
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Machine learning based COVID-19 study performance prediction
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PPTX
Cloud computing and distributed systems.
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
Chapter 3 Spatial Domain Image Processing.pdf
Big Data Technologies - Introduction.pptx
MYSQL Presentation for SQL database connectivity
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
Approach and Philosophy of On baking technology
Spectral efficient network and resource selection model in 5G networks
Unlocking AI with Model Context Protocol (MCP)
“AI and Expert System Decision Support & Business Intelligence Systems”
NewMind AI Monthly Chronicles - July 2025
KodekX | Application Modernization Development
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Modernizing your data center with Dell and AMD
Agricultural_Statistics_at_a_Glance_2022_0.pdf
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Machine learning based COVID-19 study performance prediction
The Rise and Fall of 3GPP – Time for a Sabbatical?
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Cloud computing and distributed systems.
Mobile App Security Testing_ A Comprehensive Guide.pdf
Building Integrated photovoltaic BIPV_UPV.pdf

EclipseCon 2021 NoSQL Endgame