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

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 

Recently uploaded (20)

Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 

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