SlideShare a Scribd company logo
NoSQL Endgame
Our Partners 2021:
Thodoris Bais
Werner Keil
Werner Keil Thodoris Bais
Jakarta EE Specification Committee Member Expert Group Member JSR-385
Let’s meet
@thodorisbais
@wernerkeil
@thodorisbais
@wernerkeil
ABN Amro Bank
Financial sector
Amsterdam
Agile organization
20,000
3000+
400+
Total number of employees
Enterprise bank
Headquarters Development Teams
DevOps / Hybrid cloud Applications
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
Repository
public interface MovieRepository extends
ReactiveNeo4jRepository<MovieEntity, String> {
Mono<MovieEntity> findOneByTitle(String title);
}
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<>();
}
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 !
Our Partners 2021:

More Related Content

PPTX
NoSQL Endgame JCON Conference 2020
PPTX
NoSQL Endgame DevoxxUA Conference 2020
PPTX
EclipseCon 2021 NoSQL Endgame
PPTX
NoSQL Endgame - Java2Days 2020 Virtual
PDF
[iOS] Networking
PDF
[iOS] Data Storage
PPTX
Entity Framework Database and Code First
PPTX
Getting Started with MongoDB Using the Microsoft Stack
NoSQL Endgame JCON Conference 2020
NoSQL Endgame DevoxxUA Conference 2020
EclipseCon 2021 NoSQL Endgame
NoSQL Endgame - Java2Days 2020 Virtual
[iOS] Networking
[iOS] Data Storage
Entity Framework Database and Code First
Getting Started with MongoDB Using the Microsoft Stack

What's hot (20)

PDF
Arm yourself with Domain Driven Security. It's time to slay some security trolls
PDF
Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]
PDF
Domain driven security_java_zone2016
PPTX
GraphQL Security
PDF
Designing software with security in mind
PDF
Designing software with security in mind?
PPTX
NoSQL Endgame Percona Live Online 2020
PDF
Oracle NoSQL
PDF
Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]
PDF
What do you mean, Backwards Compatibility?
PDF
Building a Microservices-based ERP System
PPTX
eHarmony - Messaging Platform with MongoDB Atlas
PPTX
How Thermo Fisher is Reducing Data Analysis Times from Days to Minutes with M...
PDF
Titan: Scaling Graphs and TinkerPop3
PPTX
Introducing Entity Framework 4.0
PPTX
Morphia, Spring Data & Co.
PPTX
Document Validation in MongoDB 3.2
PPTX
Java Persistence Frameworks for MongoDB
PDF
The autodiscover algorithm for locating the source of information part 05#36
PPTX
Building Spring Data with MongoDB
Arm yourself with Domain Driven Security. It's time to slay some security trolls
Jakarta EE Meets NoSQL in the Cloud Age [DEV6109]
Domain driven security_java_zone2016
GraphQL Security
Designing software with security in mind
Designing software with security in mind?
NoSQL Endgame Percona Live Online 2020
Oracle NoSQL
Eclipse JNoSQL: One API to Many NoSQL Databases - BYOL [HOL5998]
What do you mean, Backwards Compatibility?
Building a Microservices-based ERP System
eHarmony - Messaging Platform with MongoDB Atlas
How Thermo Fisher is Reducing Data Analysis Times from Days to Minutes with M...
Titan: Scaling Graphs and TinkerPop3
Introducing Entity Framework 4.0
Morphia, Spring Data & Co.
Document Validation in MongoDB 3.2
Java Persistence Frameworks for MongoDB
The autodiscover algorithm for locating the source of information part 05#36
Building Spring Data with MongoDB
Ad

Similar to NoSQL Endgame LWJUG 2021 (20)

PPTX
JakartaData-JCon.pptx
PDF
Grails and Neo4j
PDF
GR8Conf 2011: Neo4j Plugin
PPTX
Neo4 + Grails
PDF
Leveraging your Knowledge of ORM Towards Performance-based NoSQL Technology
PPTX
Big data technology unit 3
PPTX
Neo4J and Grails
PDF
NoSQL, no Limits, lots of Fun!
PPTX
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL Databases
PDF
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL Database
PPTX
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
PDF
NoSQL Databases
PDF
Data access 2.0? Please welcome: Spring Data!
PPT
Spring data presentation
PDF
An introduction into Spring Data
PPTX
Spring Data - Intro (Odessa Java TechTalks)
PDF
Hands On Spring Data
PPTX
2018 05 08_biological_databases_no_sql
PDF
Nosql part1 8th December
JakartaData-JCon.pptx
Grails and Neo4j
GR8Conf 2011: Neo4j Plugin
Neo4 + Grails
Leveraging your Knowledge of ORM Towards Performance-based NoSQL Technology
Big data technology unit 3
Neo4J and Grails
NoSQL, no Limits, lots of Fun!
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL Databases
Eclipse JNoSQL: The Definitive Solution for Java and NoSQL Database
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
NoSQL Databases
Data access 2.0? Please welcome: Spring Data!
Spring data presentation
An introduction into Spring Data
Spring Data - Intro (Odessa Java TechTalks)
Hands On Spring Data
2018 05 08_biological_databases_no_sql
Nosql part1 8th December
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
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
A Presentation on Artificial Intelligence
PDF
KodekX | Application Modernization Development
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
NewMind AI Monthly Chronicles - July 2025
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
Big Data Technologies - Introduction.pptx
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Network Security Unit 5.pdf for BCA BBA.
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Dropbox Q2 2025 Financial Results & Investor Presentation
Advanced methodologies resolving dimensionality complications for autism neur...
Encapsulation_ Review paper, used for researhc scholars
Per capita expenditure prediction using model stacking based on satellite ima...
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
A Presentation on Artificial Intelligence
KodekX | Application Modernization Development
Diabetes mellitus diagnosis method based random forest with bat algorithm
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
NewMind AI Monthly Chronicles - July 2025
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Mobile App Security Testing_ A Comprehensive Guide.pdf
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Building Integrated photovoltaic BIPV_UPV.pdf
Big Data Technologies - Introduction.pptx
Unlocking AI with Model Context Protocol (MCP)
Network Security Unit 5.pdf for BCA BBA.
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
20250228 LYD VKU AI Blended-Learning.pptx
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx

NoSQL Endgame LWJUG 2021