SlideShare a Scribd company logo
1 of 49
A NoSQL Alternative
to Persisting Data in
your Android Apps
Priya	Rajagopal
@rajagp
About Me
2
• Priya Rajagopal, Ann Arbor, Michigan
• Mobile Developer Advocate, Couchbase
• Organizer, Mobile Monday Ann Arbor
• 18+ years of professional software development
• Long Time iOS Developer *cough cough *
• Over a decade in R&D
• Twitter : @ rajagp
Modern Data
Issues
3
1
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Security
4
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Platform Support
5
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Global Scale
6
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Peer-to-Peer
7
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Offline
8
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Data Synchronization
9
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
1
2
or
Data Conflicts
10
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
Image	Copyright:https://askfortheworld.files.wordpress.com/2013/02/conflict2.jpg
Data Persistence
in Android
11
2
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Why should you care?
12
• Creating “offline first” apps
• Airplane mode
• Regions of poor or no network connectivity
• Improve Perceived User Experience / Start up Time
• Prebuilt bundled database
• Caching of semi-static /static data
• No backend to host data / Local only store
• Privacy
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Options in Android
13
• SQLite
• Embedded Public Domain SQL Database Engine
• SQLiteOpenHelper class
• Room
• Shared Preferences
• Key-Value Store for small datasets
• Internal Storage
• File System. Persistent or Cached.
• External Storage
• SD cards
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
SQLite - Impedence Mismatch : Table -> Objects
14
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Handling Database Structural Changes
15
• Option 1: Delete the app from Device
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Handling Database Structural Changes
16
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
• Option 2: Silently drop the table
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + this.TABLE_NAME);
onCreate(sqLiteDatabase);
}
Data Migrations : Simple Case
17
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
@Override
public	void	onUpgrade(SQLiteDatabase sqLiteDatabase,	int oldVersion,	int newVersion)	{
if	(oldVersion <	2)	{
String	alter_table_add_website =	"ALTER	TABLE	"	+	this.TABLE_UNIVERSITY +
"ADD	COLUMN	"	+	"website"	;
sqLiteDatabase.execSQL(alter_table_add_website);
}
if	(oldVersion <	3)	{
String	alter_table_rename =	"ALTER	TABLE	"	+	this.TABLE_UNIVERSITY +
"RENAME	TO	"	+	"University"	;
sqLiteDatabase.execSQL(alter_table_rename);
}
//	Migrate	other	versions	….
}
Data Migrations : Complicated
18
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
• Create new Table with desired format
• Transfer content over from old to new Table
• Drop old Table
• Rename new Table
• Recreate indexes
Progressive Migrations
19
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
Startup Time for Migrations
AppV1
V1
V1	->	V2
mapping
AppV2
V2
AppV3
V3
V2	->	V3
mapping
AppV4
V4
AppV5
V5
V4	->	V5
mapping
AppV6
V6
V5	->	V6
mapping
NoSQL
21
3
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
What is NoSQL ?
22
• Non Relational
• Unstructured/ Semi-structured
• Scalable
• SQL-type Queries
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Four popular NoSQL data models
23
Confidential and Proprietary. Do not distribute without Couchbase consent. © Couchbase 2017. All rights reserved.
Key-value
Email
advocates@couchbase.c
om
Key Value
Profile {
"name": "A Person",
"location": "Someplace"
}
Logo
Four popular NoSQL data models
Author Column 1Row
Columnar
JK
Rowling
Column 2
Harry Potter and
the Philosopher's
Stone
1997
Title
Year of
release
Harry Potter and
the Chamber of
Secrets
1998
Harry Potter and
the NoSQL
database
2017
Four popular NoSQL data models
Graph
This is
Euler
Priya Shirly
Ann	
Jackson
MITMassachusetts
RPI
Went	to President	
of
Went	to
Is	in
Lived	in
Four popular NoSQL data models
Document
{
"name": "A Person",
"location": "Place",
"team": "Team A",
"interests": "music"
}
{
"name": "A Person",
"location": "Place",
"team": "Team A",
"interests": "music"
}
JSON Data Modeling
Normalized	=	Reference De-normalized	=	Embed
JSON -> Native Object Mapping
NoSQL: Example 1
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase consent.	©	Couchbase 2017.	All	rights	reserved.	
US Umich.edu
University	Of	
Michigan US harvard.edu Harvard	University -10516645301
{
"type":"university",
"name":"University of Michigan",
"domain":"umich.edu",
"country":"US”
}
{
"type":"university",
"name":"Harvard University”,
"domain":"harvard.edu",
"country":"US",
"estDate":-10516645301
}
NoSQL : Example 2
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
US harvard.edu
Harvard	
University
{
"type":"university",
"name":"Harvard University",
"domain":"harvard.edu”,
"country":"US",
"estDate":-10516645301
}
-10516645301
(Double)
US harvard.edu Harvard	University “1636”
(String)
{
"type":"university",
"name":"Harvard University",
"domain":"harvard.edu”,
"country":"US",
"estYear": “1636”
}
String	estYear =	doc.getString("estYear");
if	(estYear !=	null)	{
//	Handle	case	with	estYear.	
}
else	{
Date	estDate =	doc.getDate("estDate");
if	(estDate !=	null)	{
//	Handle	case	with	estDate
}
}
NoSQL For
Android :
Couchbase Mobile
31
4
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Couchbase Lite
32
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
Mobile	App
Couchbase Lite
Native	API	
Native	Platform	
Bindings
JSON
Lite	Core	Engine
Fleece
SQLite	Engine
• Embedded NoSQL Database
• Open Source
• JSON Document Store
• Android, iOS, .NET…
• Community and Enterprise
• Production Release 1.4
• Developer Preview 2.0
Couchbase Mobile Platform: Full Stack Database Platform
33
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
Couchbase Lite Sync Gateway Couchbase Server
EMBEDDED DATABASE SYNCHRONIZATION DATABASE SERVER
SECURITY
NoSQL	Document	Style
Getting Started
34
• https://developer.couchbase.com
• Developer Builds
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Integrating with your Android Project
35
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Creating / Opening a Database
36
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
// Set Database configuration
DatabaseConfiguration config = new DatabaseConfiguration(context);
File dir = context.getDir("MyData",Context.MODE_PRIVATE);
config.setDirectory(dir);
config.setEncryptionKey( /*encryption key object*/ );
config.setConflictResolver(/*Set custom resolver*/ );
// Create / Open a database with specified name and configuration
database = new Database(DATABASE_NAME, config);
Indexing
37
// Create value index of "type" property
List<Expression> valueProp = new ArrayList<Expression>();
valueProp.add(Expression.property("type"));
database.createIndex(valueProp);
// Create full text search index
List<Expression> ftsProp = new ArrayList<Expression>();
ftsProp.add(Expression.property("overview"));
database.createIndex(ftsProp, IndexType.FullText, new IndexOptions("en",true));
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Inserting Document
38
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
// Create a new document with specified ”props” map
// If Id is not provided, system generates Id
Document document = new Document(id, props);
database.save(document);
Supported Data Types :
• List
• Date
• Map
• Number
• Null
• String
• Blob
Typed Accessors
Deleting Document
39
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
Document document = database.getDocument(id);
if (document != null) {
database.delete(document);
}
Deleting Document
40
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
Document document = database.getDocument(id);
if (document != null) {
database.delete(document);
}
Queries
41
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
Query query = Query.select(SelectResult.all())
.from(DataSource.database(dbMgr.database))
.where((Expression.property("skills").in("music","movies")).and(Expression.property("type").equalTo("
student")))
.groupBy(Expression.property("grade"))
.orderBy(Ordering.property("name").ascending());
try query.explain()
try query.run()
Full Text Search
42
let query = Query.select(SelectResult.expression(Expression.meta().id)))
.from(DataSource.database(database))
.where (Expression.property("overview").match("music”))
.orderBy(Ordering.property("name").ascending());
try query.explain()
try query.run()
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Live Queries
43
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
// Create a liveQuery to fetch all documents from database
query = Query.
select(SelectResult.all()).
from(DataSource.database(dbMgr.database)).
toLive();
// Add a live query listener to continually monitor for changes
query.addChangeListener(new LiveQueryChangeListener() {
@Override
public void changed(LiveQueryChange change) {
ResultSet resultRows = change.getRows();
Result row;
// Iterate over changed rows, corresponding documents and map to University POJO
while ((row = resultRows.next()) != null) {
// Handle changed row
}
}
}) ;
query.run();
Batch Requests
44
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
db.inBatch(
new Runnable() {
@Override
public void run() {
// Database Operations
}
}
);
Conflict Resolution
45
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.	
• Default Conflict Resolver Provided by System
• Conflict Resolver Invoked on Document Save or during replication update
// Set custom conflict resolver
// In Database configuration
config.setConflictResolver(/*Set object that implements the resolver method*/ );
@Override
public ReadOnlyDocument resolve(Conflict conflict) {
// Get revisions in conflict. Select a winner or merge changes to base
ReadOnlyDocument mine = conflict.getMine();
ReadOnlyDocument theirs = conflict.getTheirs();
return mine;
}
Threading
46
• Thread Safe API
• Replicator updates on Background Thread
• Database change notifications on main thread
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Replication / Sync
47
// Sync Gateway Endpoint
private final static String SYNC_GATEWAY_URL = "blip://10.0.2.2:4984/mydatabase/";
// Set Replicator Configuration
ReplicatorConfiguration config = new ReplicatorConfiguration(database, new URI(SYNC_GATEWAY_URL));
config.setContinuous(true);
config.setReplicatorType(ReplicatorConfiguration.ReplicatorType.PUSH_AND_PULL);
config.setAuthenticator(new BasicAuthenticator("user","Password"));
config.setChannels( Arrays.asList("userchannel"));
// Start Replicator Configuration with remote Sync Gateway
mPushPull = new Replicator(config);
mPushPull.addChangeListener(this);
mPushPull.start();
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Resources
48
• Couchbase Developer Portal
• https://developer.couchbase.com
• Source Code
• https://github.com/couchbaselabs
• https://github.com/couchbase/
Confidential	and	Proprietary.	Do	not	distribute	without	Couchbase	consent.	©	Couchbase	2017.	All	rights	reserved.
Thank	you
@rajagp
©2017	Couchbase.	All	rights	reserved. 49

More Related Content

Similar to A NoSQL Alternative to Persisting Data in your Android Apps

Bloor Research & DataStax: How graph databases solve previously unsolvable bu...
Bloor Research & DataStax: How graph databases solve previously unsolvable bu...Bloor Research & DataStax: How graph databases solve previously unsolvable bu...
Bloor Research & DataStax: How graph databases solve previously unsolvable bu...DataStax
 
Introducción a Neo4j
Introducción a Neo4jIntroducción a Neo4j
Introducción a Neo4jNeo4j
 
Neo4J : Introduction to Graph Database
Neo4J : Introduction to Graph DatabaseNeo4J : Introduction to Graph Database
Neo4J : Introduction to Graph DatabaseMindfire Solutions
 
Intro to Neo4j and Graph Databases
Intro to Neo4j and Graph DatabasesIntro to Neo4j and Graph Databases
Intro to Neo4j and Graph DatabasesNeo4j
 
Intro to Neo4j Webinar
Intro to Neo4j WebinarIntro to Neo4j Webinar
Intro to Neo4j WebinarNeo4j
 
Graph Databases
Graph DatabasesGraph Databases
Graph Databasesthai
 
DrupalCamp NJ 2014 Solr and Schema.org
DrupalCamp NJ 2014 Solr and Schema.orgDrupalCamp NJ 2014 Solr and Schema.org
DrupalCamp NJ 2014 Solr and Schema.orgscorlosquet
 
Contextual Computing: Laying a Global Data Foundation
Contextual Computing: Laying a Global Data FoundationContextual Computing: Laying a Global Data Foundation
Contextual Computing: Laying a Global Data FoundationRichard Wallis
 
Schema.org where did that come from?
Schema.org where did that come from?Schema.org where did that come from?
Schema.org where did that come from?Richard Wallis
 
The Future of Search and SEO in Drupal
The Future of Search and SEO in DrupalThe Future of Search and SEO in Drupal
The Future of Search and SEO in Drupalscorlosquet
 
Applying large scale text analytics with graph databases
Applying large scale text analytics with graph databasesApplying large scale text analytics with graph databases
Applying large scale text analytics with graph databasesData Ninja API
 
Schema.org: Where did that come from!
Schema.org: Where did that come from!Schema.org: Where did that come from!
Schema.org: Where did that come from!Richard Wallis
 
Sparkler—Crawler on Apache Spark: Spark Summit East talk by Karanjeet Singh a...
Sparkler—Crawler on Apache Spark: Spark Summit East talk by Karanjeet Singh a...Sparkler—Crawler on Apache Spark: Spark Summit East talk by Karanjeet Singh a...
Sparkler—Crawler on Apache Spark: Spark Summit East talk by Karanjeet Singh a...Spark Summit
 
Sparkler at spark summit east 2017
Sparkler at spark summit east 2017Sparkler at spark summit east 2017
Sparkler at spark summit east 2017Thamme Gowda
 
Sparkler Presentation for Spark Summit East 2017
Sparkler Presentation for Spark Summit East 2017Sparkler Presentation for Spark Summit East 2017
Sparkler Presentation for Spark Summit East 2017Karanjeet Singh
 
Data Science Popup Austin: Back to The Future for Data and Analytics
Data Science Popup Austin: Back to The Future for Data and AnalyticsData Science Popup Austin: Back to The Future for Data and Analytics
Data Science Popup Austin: Back to The Future for Data and AnalyticsDomino Data Lab
 
Neo4j Training Introduction
Neo4j Training IntroductionNeo4j Training Introduction
Neo4j Training IntroductionMax De Marzi
 
The Connected Data Imperative: The Shifting Enterprise Data Story
The Connected Data Imperative: The Shifting Enterprise Data StoryThe Connected Data Imperative: The Shifting Enterprise Data Story
The Connected Data Imperative: The Shifting Enterprise Data StoryNeo4j
 

Similar to A NoSQL Alternative to Persisting Data in your Android Apps (20)

Bloor Research & DataStax: How graph databases solve previously unsolvable bu...
Bloor Research & DataStax: How graph databases solve previously unsolvable bu...Bloor Research & DataStax: How graph databases solve previously unsolvable bu...
Bloor Research & DataStax: How graph databases solve previously unsolvable bu...
 
Introducción a Neo4j
Introducción a Neo4jIntroducción a Neo4j
Introducción a Neo4j
 
Neo4J : Introduction to Graph Database
Neo4J : Introduction to Graph DatabaseNeo4J : Introduction to Graph Database
Neo4J : Introduction to Graph Database
 
Intro to Neo4j and Graph Databases
Intro to Neo4j and Graph DatabasesIntro to Neo4j and Graph Databases
Intro to Neo4j and Graph Databases
 
Intro to Neo4j Webinar
Intro to Neo4j WebinarIntro to Neo4j Webinar
Intro to Neo4j Webinar
 
Graph Databases
Graph DatabasesGraph Databases
Graph Databases
 
DrupalCamp NJ 2014 Solr and Schema.org
DrupalCamp NJ 2014 Solr and Schema.orgDrupalCamp NJ 2014 Solr and Schema.org
DrupalCamp NJ 2014 Solr and Schema.org
 
Contextual Computing: Laying a Global Data Foundation
Contextual Computing: Laying a Global Data FoundationContextual Computing: Laying a Global Data Foundation
Contextual Computing: Laying a Global Data Foundation
 
Schema.org where did that come from?
Schema.org where did that come from?Schema.org where did that come from?
Schema.org where did that come from?
 
The Future of Search and SEO in Drupal
The Future of Search and SEO in DrupalThe Future of Search and SEO in Drupal
The Future of Search and SEO in Drupal
 
Applying large scale text analytics with graph databases
Applying large scale text analytics with graph databasesApplying large scale text analytics with graph databases
Applying large scale text analytics with graph databases
 
Schema.org: Where did that come from!
Schema.org: Where did that come from!Schema.org: Where did that come from!
Schema.org: Where did that come from!
 
GraphDB
GraphDBGraphDB
GraphDB
 
Sparkler—Crawler on Apache Spark: Spark Summit East talk by Karanjeet Singh a...
Sparkler—Crawler on Apache Spark: Spark Summit East talk by Karanjeet Singh a...Sparkler—Crawler on Apache Spark: Spark Summit East talk by Karanjeet Singh a...
Sparkler—Crawler on Apache Spark: Spark Summit East talk by Karanjeet Singh a...
 
Sparkler at spark summit east 2017
Sparkler at spark summit east 2017Sparkler at spark summit east 2017
Sparkler at spark summit east 2017
 
Sparkler Presentation for Spark Summit East 2017
Sparkler Presentation for Spark Summit East 2017Sparkler Presentation for Spark Summit East 2017
Sparkler Presentation for Spark Summit East 2017
 
Data Science Popup Austin: Back to The Future for Data and Analytics
Data Science Popup Austin: Back to The Future for Data and AnalyticsData Science Popup Austin: Back to The Future for Data and Analytics
Data Science Popup Austin: Back to The Future for Data and Analytics
 
From Big Data to Fast Data
From Big Data to Fast DataFrom Big Data to Fast Data
From Big Data to Fast Data
 
Neo4j Training Introduction
Neo4j Training IntroductionNeo4j Training Introduction
Neo4j Training Introduction
 
The Connected Data Imperative: The Shifting Enterprise Data Story
The Connected Data Imperative: The Shifting Enterprise Data StoryThe Connected Data Imperative: The Shifting Enterprise Data Story
The Connected Data Imperative: The Shifting Enterprise Data Story
 

Recently uploaded

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontologyjohnbeverley2021
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 

Recently uploaded (20)

presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 

A NoSQL Alternative to Persisting Data in your Android Apps

Editor's Notes

  1. Concurrent Updates to Data Conflict Handling Automatic On Device In the Cloud By an External System By a Human
  2. Room : remove biolerplate code, simpler migrations (still same issues), compile time checked queries, no db ops on main thread Entities, DaO
  3. In fact AFAIK, Room If u don’t provide migration, it will just delete all the data in incompatible store