SlideShare a Scribd company logo
MongoDB Mobile
Bringing the Power of MongoDB to Your Device
This presentation contains “forward-looking statements” within the meaning of Section 27A of the Securities Act of 1933,
as amended, and Section 21E of the Securities Exchange Act of 1934, as amended. Such forward-looking statements are
subject to a number of risks, uncertainties, assumptions and other factors that could cause actual results and the timing of
certain events to differ materially from future results expressed or implied by the forward-looking statements. Factors that
could cause or contribute to such differences include, but are not limited to, those identified our filings with the Securities
and Exchange Commission. You should not rely upon forward-looking statements as predictions of future events.
Furthermore, such forward-looking statements speak only as of the date of this presentation.
In particular, the development, release, and timing of any features or functionality described for MongoDB products
remains at MongoDB’s sole discretion. This information is merely intended to outline our general product direction and it
should not be relied on in making a purchasing decision nor is this a commitment, promise or legal obligation to deliver
any material, code, or functionality. Except as required by law, we undertake no obligation to update any forward-looking
statements to reflect events or circumstances after the date of such statements.
Safe Harbor Statement
Matt Grogan
Senior Solutions Architect
Ben Ogden
Senior Solutions Architect
We've Come a Long Way
Mobile is becoming not only the new
digital hub, but also the bridge to the
physical world. That’s why mobile will
affect more than just your digital
operations — it will transform your
entire business.
Thomas Husson, Vice President and Principal
Analyst at Forrester Research
Mobile
Is Transforming Everything
A Complete Data Platform
Geographically distributed backend services
• MongoDB Atlas
• Point and click active/active global clusters
• Effortless HA, DR, and low-latency access
• MongoDB Stitch, Serverless Platform
• Automatic scaling based on request volume
• Stitch Query Anywhere
• Stitch Functions
• Stitch Triggers
• Stitch Mobile Sync (Beta)
Geographically distributed frontend services
• MongoDB Mobile
• IoT and edge devices
• iOS and Android apps
• Supporting local offline storage
Stitch provides a seamless bridge between them
Stitch
The serverless platform from
MongoDB
Build better apps faster with
MongoDB Stitch Services
MongoDB Mobile
Platform Details
Operating System OS Details CPUs Devices
iOS 11.0+ ARM64
x86_64 (simulators)
Apple, Inc.
tvOS 11.0+ ARM64
x86_64 (simulators)
Apple, Inc.
watchOS 4.2+ ARMv7k
i386 (simulators)
Apple, Inc.
Android 5.0/Lollipop+ x86_64
armeabi-v7a
arm64-v8a
Any vendor
(by ABI)
Linux TBD x86_64 Any vendor
macOS 10.10+ x86_64 Apple, Inc.
The Full Stack
Your Mobile Application
• iOS and Android devices
• Leveraging the power of MongoDB everywhere
• Allowing you to focus on building your GREAT THING
MongoDB Stitch SDK
• Access to MongoDB and Cloud services from Android and iOS
• New Stitch interfaces for on-device (local) storage
• Bi-directional synchronization between local and remote
MongoDB Mobile Drivers
• Swift for iOS, Java for Android
• Existing drivers, extended to support local storage
MongoDB Mobile Database
• A lite version of MongoDB as a library
• C language interface to the library
• Fully passive, no background threads or tasks
MongoDB Mobile Storage Engine
• K/V storage on top of SQLite
• Very small disk footprint and minimal memory usage
• Energy efficient
The Full Stack
Stitch SDK
Packages the entire mobile stack together
Stitches the frontend and backend together
• End-to-end Mobile SDK
• API for local storage
• API for remote Stitch service invocation
• API for syncing between local and remote
• Provides a transparent bridge for applications
iOS SDK: https://github.com/mongodb/stitch-ios-sdk/
Android SDK: https://github.com/mongodb/stitch-android-sdk/
final StitchAppClient client = Stitch.getDefaultAppClient();
final MongoClient mongoClient =
client.getServiceClient(LocalMongoDbService.ClientFactory);
MongoCollection<Document> items =
mongoClient.getDatabase(TodoItem.TODO_LIST_DATABASE).getCollection(TodoItem.TODO_L
IST_COLLECTION);
public void updateChecked(final ObjectId itemId, final boolean isChecked) {
final Document updateDoc = new Document("$set", new
Document(TodoItem.CHECKED_KEY, isChecked));
if (isChecked) {
updateDoc.append("$currentDate", new Document(TodoItem.DONE_DATE_KEY, true));
} else {
updateDoc.append("$unset", new Document(TodoItem.DONE_DATE_KEY, ""));
}
items.updateOne(new Document(TodoItem.ID_KEY, itemId), updateDoc);
...
}
private List<TodoItem> getItems() {
final ArrayList<TodoItem> todoItems = new ArrayList<>();
for (final Document doc : items.find()) {
if (TodoItem.isTodoItem(doc)) {
final TodoItem item = new TodoItem(doc);
todoItems.add(item);
}
}
return todoItems;
}
The Full Stack
Mobile Drivers
Existing drivers for the given language
• With a few extensions
• Open a local storage instance
• Close a local storage instance
• Support today for Swift, Java, and C
• Others created based on demand
Can be tested directly
• Swift: https://github.com/mongodb/swift-mongo-mobile/
• Java:
http://central.maven.org/maven2/org/mongodb/mongodb-
driver-embedded/
import MongoMobile
…
let client = MongoMobile.create(settings:
MongoClientSettings [ dbPath: "test-path" ])
let coll = try client.db("test").collection("foo")
let insertResult = try coll.insertOne([ "test": 42 ])
let findResult = try coll.find([ "_id":
insertResult!.insertedId ])
let docs = Array(findResult)
…
* Complete example
The Full Stack
Mobile Database
Lite version of MongoDB formed into a library
• C ABI
• Auth, Replication, Sharding, etc. removed
• Supports only the mobile storage engine
• Passive: no background threads
• Light: disk, memory, energy
C Interface
• Low level
• Drivers are extended to invoke it
Availability
• Builds out of MongoDB 4.0+ community tree
• Pre-built binary packages for mobile targets
lib = mongo_embedded_v1_lib_init (&params, status);
instance = mongo_embedded_v1_instance_create (lib,
params.yaml_config, status);
client = mongoc_embedded_v1_client_create (instance);
collection = mongoc_client_get_collection (client,
"iot_test", "sensor_data");
insert = bson_new ();
BSON_APPEND_UTF8 (insert, "message", "Hey there!");
BSON_APPEND_UTF8 (insert, "from", "Matt Lord);
mongoc_collection_insert_one (collection, insert, NULL,
NULL, &error);
query = bson_new ();
cursor = mongoc_collection_find_with_opts (collection,
query, NULL, NULL);
while (mongoc_cursor_next(cursor, &doc)) {
str = bson_as_canonical_extended_json (doc, NULL);
printf ("%sn", str);
bson_free (str);
}
* Complete example
The Full Stack
Mobile Storage Engine
Leverages SQLite as a K/V store
• Maintaining full MongoDB Query Language support
• Single SQLite database called “mobile”
• Table names follow the WiredTiger filesystem / dictionary
naming convention
• Every entity you create
• database, collection, index, …
Can be tested with standard MongoDB
./buildscripts/scons.py mongod --mobile-se=on
./build/opt/mongo/mongod --storageEngine=mobile
sqlite> .database
main: /.../mobile.sqlite
sqlite> .tables
_mdb_catalog index-1-
1419396644176400596
collection-0-1419396644176400596 index-1-
9204882299253173129
collection-0-9204882299253173129
sqlite> select sql from sqlite_master where
name='collection-0-9204882299253173129';
CREATE TABLE "collection-0-6881873531296038739"(rec_id INT,
data BLOB, PRIMARY KEY(rec_id))
sqlite> select sql from sqlite_master where name='index-1-
9204882299253173129';
CREATE TABLE "index-1-9204882299253173129"(key BLOB PRIMARY
KEY, value BLOB)
sqlite> select * from `collection-0-9204882299253173129`;
rec_id data
---------- ----------
1 2
Mobile Sync
Stitch Mobile Sync
Example Setup
Steps for Sync
1. Define Sync + Conflict Handlers on a collection
2. Add Documents to be synced
3. Application manages local documents
4. Stitch then syncs state with the backend automatically
• Bi-directional synchronization
// Initialize your application, then configure Synced
collections Stitch.initializeDefaultAppClient('<your-
app-id>').then(() => {
tripsColl.configureSync(trip_conflict,
trip_change, trip_error);
...
});
// Find all trips that should be synced and ensure
they’re synced
tripsColl.find({user:
stitch.getUserId()}).toArray().then(trips =>{
tripsColl.syncMany(trips)
});
...
tripsColl.sync().update({trip_id:currTripId},{meal_ch
oice: selectedMeal});
...
Stitch Mobile Sync
Example Usage
Stitch Syncs data when online on a per operation basis
Uses 3 client-side event responders
• ChangeListener
• ConflictHandler
• ErrorListener
Handlers receive all local/remote changes
// On changes to the remote document the trip_change
handler is called
function trip_change(changeEvent){
...
if(updatedFields.keys().includes(“Gate”)){
setStatusBarUpdate(“Gate Changed”, tripID,
gate);
}
...
}
// On a conflict, the trip_conflict handler is called
function trip_conflict(localDoc, remoteDoc){
newStatus = remoteDoc;
for(key in remoteDoc.keys()){
if(localDoc[key] != remoteDoc[key] &&
isLocalPreferred(key)){
newStatus[key] = localDoc[key]
}
}
// Returning a document from the handler will
attempt to write it
return newStatus;
};
Demo: What’s For Lunch?
https://docs.mongodb.com/stitch/tutorials/todo-ios/
What’s Next
Roadmap
Subject to Change
Thank You!

More Related Content

PPTX
MongoDB.local DC 2018: MongoDB Mobile: Bringing the Power of MongoDB to Your ...
PDF
MongoDB.local Berlin: MongoDB Mobile
PPTX
MongoDB.local Sydney 2019: MongoDB Mobile: Bringing the Power of MongoDB to Y...
PPTX
MongoDB Mobile: Bringing the Power of MongoDB to Your Device
PDF
MongoDB.local Austin 2018: MongoDB Mobile: Bringing the Power of MongoDB to Y...
PPTX
MongDB Mobile: Bringing the Power of MongoDB to Your Device
PPTX
MongoDB Mobile: Bringing the Power of MongoDB to Your Device
PPTX
MongoDB Mobile - Bringing the Power of MongoDB to your Device
MongoDB.local DC 2018: MongoDB Mobile: Bringing the Power of MongoDB to Your ...
MongoDB.local Berlin: MongoDB Mobile
MongoDB.local Sydney 2019: MongoDB Mobile: Bringing the Power of MongoDB to Y...
MongoDB Mobile: Bringing the Power of MongoDB to Your Device
MongoDB.local Austin 2018: MongoDB Mobile: Bringing the Power of MongoDB to Y...
MongDB Mobile: Bringing the Power of MongoDB to Your Device
MongoDB Mobile: Bringing the Power of MongoDB to Your Device
MongoDB Mobile - Bringing the Power of MongoDB to your Device

What's hot (20)

PDF
MongoDB .local Toronto 2019: MongoDB Atlas Jumpstart
PDF
20130923 tech days windows 8.1 what's new
PDF
MongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDB
PDF
MongoDB .local Toronto 2019: MongoDB – Powering the new age data demands
PDF
10 - MongoDB
PPTX
[MongoDB.local Bengaluru 2018] Just in Time Validation with JSON Schema
PDF
MongoDB Mobile
PDF
Responsive & Responsible: Implementing Responsive Design at Scale
PDF
MongoDB .local Chicago 2019: From SQL to NoSQL -- Changing Your Mindset
PDF
MongoDB .local Paris 2020: Les bonnes pratiques pour travailler avec les donn...
PDF
MongoDB .local Paris 2020: Tout savoir sur le moteur de recherche Full Text S...
PDF
MongoDB World 2019: Ticketek: Scaling to Global Ticket Sales with MongoDB Atlas
PPTX
[MongoDB.local Bengaluru 2018] Keynote
PDF
MongoDB SoCal 2020: MongoDB Atlas Jump Start
PPTX
[MongoDB.local Bengaluru 2018] Introduction to MongoDB Stitch
PPTX
20130923 tech days windows 8.1 what's new
PPTX
20131114 [msdn] windows 8.1 api 新功能
PPTX
Performance and Security Enhancements in MongoDB's BI Connector
PPTX
Tutorial: Building Your First App with MongoDB Stitch
PDF
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Toronto 2019: MongoDB Atlas Jumpstart
20130923 tech days windows 8.1 what's new
MongoDB .local Paris 2020: Les bonnes pratiques pour sécuriser MongoDB
MongoDB .local Toronto 2019: MongoDB – Powering the new age data demands
10 - MongoDB
[MongoDB.local Bengaluru 2018] Just in Time Validation with JSON Schema
MongoDB Mobile
Responsive & Responsible: Implementing Responsive Design at Scale
MongoDB .local Chicago 2019: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local Paris 2020: Les bonnes pratiques pour travailler avec les donn...
MongoDB .local Paris 2020: Tout savoir sur le moteur de recherche Full Text S...
MongoDB World 2019: Ticketek: Scaling to Global Ticket Sales with MongoDB Atlas
[MongoDB.local Bengaluru 2018] Keynote
MongoDB SoCal 2020: MongoDB Atlas Jump Start
[MongoDB.local Bengaluru 2018] Introduction to MongoDB Stitch
20130923 tech days windows 8.1 what's new
20131114 [msdn] windows 8.1 api 新功能
Performance and Security Enhancements in MongoDB's BI Connector
Tutorial: Building Your First App with MongoDB Stitch
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
Ad

Similar to MongoDB.local Atlanta: MongoDB Mobile: Bringing the Power of MongoDB to Your Device (20)

PPTX
MongoDB.local Seattle 2019: MongoDB Mobile: Bringing the Power of MongoDB to ...
PDF
Faites évoluer votre accès aux données avec MongoDB Stitch
PPTX
MongoDB Mobile: Bringing the Power of MongoDB to Your Device
PDF
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
PPTX
MongoDB.local Austin 2018: Ch-Ch-Ch-Ch-Changes: Taking Your MongoDB Stitch A...
PDF
MongoDB Stitch Tutorial
PPTX
We don’t need no stinkin app server! Building a Two-Tier Mobile App
PDF
Easing offline web application development with GWT
PPTX
MongoDB.local Atlanta: Modern Data Backup and Recovery from On-Premises to th...
PPTX
Ch-Ch-Ch-Ch-Changes: Taking Your MongoDB Stitch Application to the Next Level...
PPTX
Introduction to MongoDB
PPT
Bye Bye Charles, Welcome Odo, Android Meetup Berlin May 2014
PPTX
Connected & Disconnected Apps with Azure Mobile Apps
PPTX
cosmodb ppt project.pptxakfjhaasjfsdajjkfasd
PDF
Meteoro de pegasuus! Desenvolvendo aplicações realtime com MeteorJS
PPTX
MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...
PDF
Spring Data MongoDB 介紹
PPTX
MongoDB.local Sydney: Evolving your Data Access with MongoDB Stitch
PPTX
Xamarin devdays 2017 - PT - connected apps
PDF
Front-end. Global domination
MongoDB.local Seattle 2019: MongoDB Mobile: Bringing the Power of MongoDB to ...
Faites évoluer votre accès aux données avec MongoDB Stitch
MongoDB Mobile: Bringing the Power of MongoDB to Your Device
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB.local Austin 2018: Ch-Ch-Ch-Ch-Changes: Taking Your MongoDB Stitch A...
MongoDB Stitch Tutorial
We don’t need no stinkin app server! Building a Two-Tier Mobile App
Easing offline web application development with GWT
MongoDB.local Atlanta: Modern Data Backup and Recovery from On-Premises to th...
Ch-Ch-Ch-Ch-Changes: Taking Your MongoDB Stitch Application to the Next Level...
Introduction to MongoDB
Bye Bye Charles, Welcome Odo, Android Meetup Berlin May 2014
Connected & Disconnected Apps with Azure Mobile Apps
cosmodb ppt project.pptxakfjhaasjfsdajjkfasd
Meteoro de pegasuus! Desenvolvendo aplicações realtime com MeteorJS
MongoDB World 2018: Ch-Ch-Ch-Ch-Changes: Taking Your Stitch Application to th...
Spring Data MongoDB 介紹
MongoDB.local Sydney: Evolving your Data Access with MongoDB Stitch
Xamarin devdays 2017 - PT - connected apps
Front-end. Global domination
Ad

More from MongoDB (20)

PDF
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
PDF
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
PDF
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
PDF
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
PDF
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
PDF
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
PDF
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
PDF
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
PDF
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
PDF
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
PDF
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
PDF
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
PDF
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
PDF
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
PDF
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
PDF
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
PDF
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
PDF
MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...
PDF
MongoDB .local Paris 2020: Devenez explorateur de données avec MongoDB Charts
PDF
MongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDB
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Adéo @MongoDB : MongoDB Atlas & Leroy Merlin : et ...
MongoDB .local Paris 2020: Devenez explorateur de données avec MongoDB Charts
MongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDB

Recently uploaded (20)

PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PPTX
Cloud computing and distributed systems.
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Electronic commerce courselecture one. Pdf
PPT
Teaching material agriculture food technology
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
DOCX
The AUB Centre for AI in Media Proposal.docx
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Digital-Transformation-Roadmap-for-Companies.pptx
Cloud computing and distributed systems.
The Rise and Fall of 3GPP – Time for a Sabbatical?
Dropbox Q2 2025 Financial Results & Investor Presentation
Electronic commerce courselecture one. Pdf
Teaching material agriculture food technology
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Shreyas Phanse Resume: Experienced Backend Engineer | Java • Spring Boot • Ka...
The AUB Centre for AI in Media Proposal.docx
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Encapsulation_ Review paper, used for researhc scholars
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
Per capita expenditure prediction using model stacking based on satellite ima...
Understanding_Digital_Forensics_Presentation.pptx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Unlocking AI with Model Context Protocol (MCP)
CIFDAQ's Market Insight: SEC Turns Pro Crypto
20250228 LYD VKU AI Blended-Learning.pptx
Agricultural_Statistics_at_a_Glance_2022_0.pdf

MongoDB.local Atlanta: MongoDB Mobile: Bringing the Power of MongoDB to Your Device

  • 1. MongoDB Mobile Bringing the Power of MongoDB to Your Device
  • 2. This presentation contains “forward-looking statements” within the meaning of Section 27A of the Securities Act of 1933, as amended, and Section 21E of the Securities Exchange Act of 1934, as amended. Such forward-looking statements are subject to a number of risks, uncertainties, assumptions and other factors that could cause actual results and the timing of certain events to differ materially from future results expressed or implied by the forward-looking statements. Factors that could cause or contribute to such differences include, but are not limited to, those identified our filings with the Securities and Exchange Commission. You should not rely upon forward-looking statements as predictions of future events. Furthermore, such forward-looking statements speak only as of the date of this presentation. In particular, the development, release, and timing of any features or functionality described for MongoDB products remains at MongoDB’s sole discretion. This information is merely intended to outline our general product direction and it should not be relied on in making a purchasing decision nor is this a commitment, promise or legal obligation to deliver any material, code, or functionality. Except as required by law, we undertake no obligation to update any forward-looking statements to reflect events or circumstances after the date of such statements. Safe Harbor Statement
  • 3. Matt Grogan Senior Solutions Architect Ben Ogden Senior Solutions Architect
  • 4. We've Come a Long Way
  • 5. Mobile is becoming not only the new digital hub, but also the bridge to the physical world. That’s why mobile will affect more than just your digital operations — it will transform your entire business. Thomas Husson, Vice President and Principal Analyst at Forrester Research Mobile Is Transforming Everything
  • 6. A Complete Data Platform Geographically distributed backend services • MongoDB Atlas • Point and click active/active global clusters • Effortless HA, DR, and low-latency access • MongoDB Stitch, Serverless Platform • Automatic scaling based on request volume • Stitch Query Anywhere • Stitch Functions • Stitch Triggers • Stitch Mobile Sync (Beta) Geographically distributed frontend services • MongoDB Mobile • IoT and edge devices • iOS and Android apps • Supporting local offline storage Stitch provides a seamless bridge between them
  • 7. Stitch The serverless platform from MongoDB Build better apps faster with MongoDB Stitch Services
  • 9. Platform Details Operating System OS Details CPUs Devices iOS 11.0+ ARM64 x86_64 (simulators) Apple, Inc. tvOS 11.0+ ARM64 x86_64 (simulators) Apple, Inc. watchOS 4.2+ ARMv7k i386 (simulators) Apple, Inc. Android 5.0/Lollipop+ x86_64 armeabi-v7a arm64-v8a Any vendor (by ABI) Linux TBD x86_64 Any vendor macOS 10.10+ x86_64 Apple, Inc.
  • 10. The Full Stack Your Mobile Application • iOS and Android devices • Leveraging the power of MongoDB everywhere • Allowing you to focus on building your GREAT THING MongoDB Stitch SDK • Access to MongoDB and Cloud services from Android and iOS • New Stitch interfaces for on-device (local) storage • Bi-directional synchronization between local and remote MongoDB Mobile Drivers • Swift for iOS, Java for Android • Existing drivers, extended to support local storage MongoDB Mobile Database • A lite version of MongoDB as a library • C language interface to the library • Fully passive, no background threads or tasks MongoDB Mobile Storage Engine • K/V storage on top of SQLite • Very small disk footprint and minimal memory usage • Energy efficient
  • 11. The Full Stack Stitch SDK Packages the entire mobile stack together Stitches the frontend and backend together • End-to-end Mobile SDK • API for local storage • API for remote Stitch service invocation • API for syncing between local and remote • Provides a transparent bridge for applications iOS SDK: https://github.com/mongodb/stitch-ios-sdk/ Android SDK: https://github.com/mongodb/stitch-android-sdk/ final StitchAppClient client = Stitch.getDefaultAppClient(); final MongoClient mongoClient = client.getServiceClient(LocalMongoDbService.ClientFactory); MongoCollection<Document> items = mongoClient.getDatabase(TodoItem.TODO_LIST_DATABASE).getCollection(TodoItem.TODO_L IST_COLLECTION); public void updateChecked(final ObjectId itemId, final boolean isChecked) { final Document updateDoc = new Document("$set", new Document(TodoItem.CHECKED_KEY, isChecked)); if (isChecked) { updateDoc.append("$currentDate", new Document(TodoItem.DONE_DATE_KEY, true)); } else { updateDoc.append("$unset", new Document(TodoItem.DONE_DATE_KEY, "")); } items.updateOne(new Document(TodoItem.ID_KEY, itemId), updateDoc); ... } private List<TodoItem> getItems() { final ArrayList<TodoItem> todoItems = new ArrayList<>(); for (final Document doc : items.find()) { if (TodoItem.isTodoItem(doc)) { final TodoItem item = new TodoItem(doc); todoItems.add(item); } } return todoItems; }
  • 12. The Full Stack Mobile Drivers Existing drivers for the given language • With a few extensions • Open a local storage instance • Close a local storage instance • Support today for Swift, Java, and C • Others created based on demand Can be tested directly • Swift: https://github.com/mongodb/swift-mongo-mobile/ • Java: http://central.maven.org/maven2/org/mongodb/mongodb- driver-embedded/ import MongoMobile … let client = MongoMobile.create(settings: MongoClientSettings [ dbPath: "test-path" ]) let coll = try client.db("test").collection("foo") let insertResult = try coll.insertOne([ "test": 42 ]) let findResult = try coll.find([ "_id": insertResult!.insertedId ]) let docs = Array(findResult) … * Complete example
  • 13. The Full Stack Mobile Database Lite version of MongoDB formed into a library • C ABI • Auth, Replication, Sharding, etc. removed • Supports only the mobile storage engine • Passive: no background threads • Light: disk, memory, energy C Interface • Low level • Drivers are extended to invoke it Availability • Builds out of MongoDB 4.0+ community tree • Pre-built binary packages for mobile targets lib = mongo_embedded_v1_lib_init (&params, status); instance = mongo_embedded_v1_instance_create (lib, params.yaml_config, status); client = mongoc_embedded_v1_client_create (instance); collection = mongoc_client_get_collection (client, "iot_test", "sensor_data"); insert = bson_new (); BSON_APPEND_UTF8 (insert, "message", "Hey there!"); BSON_APPEND_UTF8 (insert, "from", "Matt Lord); mongoc_collection_insert_one (collection, insert, NULL, NULL, &error); query = bson_new (); cursor = mongoc_collection_find_with_opts (collection, query, NULL, NULL); while (mongoc_cursor_next(cursor, &doc)) { str = bson_as_canonical_extended_json (doc, NULL); printf ("%sn", str); bson_free (str); } * Complete example
  • 14. The Full Stack Mobile Storage Engine Leverages SQLite as a K/V store • Maintaining full MongoDB Query Language support • Single SQLite database called “mobile” • Table names follow the WiredTiger filesystem / dictionary naming convention • Every entity you create • database, collection, index, … Can be tested with standard MongoDB ./buildscripts/scons.py mongod --mobile-se=on ./build/opt/mongo/mongod --storageEngine=mobile sqlite> .database main: /.../mobile.sqlite sqlite> .tables _mdb_catalog index-1- 1419396644176400596 collection-0-1419396644176400596 index-1- 9204882299253173129 collection-0-9204882299253173129 sqlite> select sql from sqlite_master where name='collection-0-9204882299253173129'; CREATE TABLE "collection-0-6881873531296038739"(rec_id INT, data BLOB, PRIMARY KEY(rec_id)) sqlite> select sql from sqlite_master where name='index-1- 9204882299253173129'; CREATE TABLE "index-1-9204882299253173129"(key BLOB PRIMARY KEY, value BLOB) sqlite> select * from `collection-0-9204882299253173129`; rec_id data ---------- ---------- 1 2
  • 16. Stitch Mobile Sync Example Setup Steps for Sync 1. Define Sync + Conflict Handlers on a collection 2. Add Documents to be synced 3. Application manages local documents 4. Stitch then syncs state with the backend automatically • Bi-directional synchronization // Initialize your application, then configure Synced collections Stitch.initializeDefaultAppClient('<your- app-id>').then(() => { tripsColl.configureSync(trip_conflict, trip_change, trip_error); ... }); // Find all trips that should be synced and ensure they’re synced tripsColl.find({user: stitch.getUserId()}).toArray().then(trips =>{ tripsColl.syncMany(trips) }); ... tripsColl.sync().update({trip_id:currTripId},{meal_ch oice: selectedMeal}); ...
  • 17. Stitch Mobile Sync Example Usage Stitch Syncs data when online on a per operation basis Uses 3 client-side event responders • ChangeListener • ConflictHandler • ErrorListener Handlers receive all local/remote changes // On changes to the remote document the trip_change handler is called function trip_change(changeEvent){ ... if(updatedFields.keys().includes(“Gate”)){ setStatusBarUpdate(“Gate Changed”, tripID, gate); } ... } // On a conflict, the trip_conflict handler is called function trip_conflict(localDoc, remoteDoc){ newStatus = remoteDoc; for(key in remoteDoc.keys()){ if(localDoc[key] != remoteDoc[key] && isLocalPreferred(key)){ newStatus[key] = localDoc[key] } } // Returning a document from the handler will attempt to write it return newStatus; };
  • 18. Demo: What’s For Lunch? https://docs.mongodb.com/stitch/tutorials/todo-ios/