building personalized experiences using couchbase sync gateway – couchbase connect 2016
TRANSCRIPT
![Page 1: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/1.jpg)
©2016 Couchbase Inc. 1
The Couchbase Connect16 mobile appTake our in-app survey!
![Page 2: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/2.jpg)
©2016 Couchbase Inc. 2
Questions? Tweet #Couchbase #SG
![Page 3: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/3.jpg)
©2016 Couchbase Inc. 4
Building Personalized Experiences
Using Couchbase Sync Gateway
![Page 4: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/4.jpg)
©2016 Couchbase Inc. 6
Introduction
Sync Gateway Features/Capabilities
Alternate Use Case: Digital Signage
Application Demonstration
Application Analysis (Code)
![Page 5: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/5.jpg)
©2016 Couchbase Inc.
Couchbase Mobile: The Complete Mobile Database Solution
Couchbase Lite Sync Gateway Couchbase Server
EMBEDDED DATABASE SYNCHRONIZATION DATABASE SERVER
SECURITY
![Page 6: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/6.jpg)
©2016 Couchbase Inc. 8
Sync Gateway Platform Features
![Page 7: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/7.jpg)
©2016 Couchbase Inc. 9
ReST + Stream + BatchAPI
(Swagger)
![Page 8: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/8.jpg)
©2016 Couchbase Inc. 10
DocumentDatabase
![Page 9: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/9.jpg)
©2016 Couchbase Inc. 11www.flickr.com/photos/xmodulo
Blobs
![Page 10: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/10.jpg)
©2016 Couchbase Inc.
Integration
Photo courtesy of Blue Coat (www.bluecoat.com) (CC BY-SA 2.0)
![Page 11: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/11.jpg)
©2016 Couchbase Inc. 13
![Page 12: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/12.jpg)
©2016 Couchbase Inc. 14
![Page 14: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/14.jpg)
©2016 Couchbase Inc. 16
Security
![Page 15: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/15.jpg)
©2016 Couchbase Inc. 17
![Page 16: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/16.jpg)
©2016 Couchbase Inc. 18
Cross ClusterSync
CBServer
SyncGateway
![Page 17: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/17.jpg)
©2016 Couchbase Inc. 19
STATE
![Page 18: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/18.jpg)
©2016 Couchbase Inc. 20
SmallFootprint
![Page 19: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/19.jpg)
©2016 Couchbase Inc. 21
![Page 20: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/20.jpg)
©2016 Couchbase Inc. 23
![Page 21: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/21.jpg)
©2016 Couchbase Inc. 24
http://en.wikipedia.org/wiki/File:Lightning_Strike_Bolts_3.jpg
Changes Feed
![Page 22: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/22.jpg)
©2016 Couchbase Inc.
Business
Logic
![Page 23: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/23.jpg)
©2016 Couchbase Inc. 26
ChannelSync
Function
Sync FunctionData routing
Business Logic
![Page 24: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/24.jpg)
©2016 Couchbase Inc. 27
Digital Signage
![Page 25: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/25.jpg)
©2016 Couchbase Inc. 28Photo courtesy of OnSign TV (CC BY 2.0)
![Page 26: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/26.jpg)
©2016 Couchbase Inc. 29
![Page 27: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/27.jpg)
©2016 Couchbase Inc. 30
![Page 28: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/28.jpg)
©2016 Couchbase Inc. 31
![Page 29: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/29.jpg)
©2016 Couchbase Inc. 32
![Page 30: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/30.jpg)
©2016 Couchbase Inc. 33
![Page 31: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/31.jpg)
©2016 Couchbase Inc. 34
Personalized Preferences
Live Demo
![Page 32: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/32.jpg)
©2016 Couchbase Inc.
Flow
![Page 33: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/33.jpg)
©2016 Couchbase Inc.
Live Demo
![Page 34: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/34.jpg)
©2016 Couchbase Inc. 37
CODE
![Page 35: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/35.jpg)
©2016 Couchbase Inc. 38
#Load the data for fqname in ./data/*.json; do filename=`basename $fqname` response=$(curl -s -X PUT -H "Content-Type: application/json” -d "@$fqname" "$cloudurl/prefer/${filename%.*}") done
#Load the data for fqname in ./data/*.json; do filename=`basename $fqname` response=$(curl -s -X PUT -H "Content-Type: application/json” -d "@$fqname" "$cloudurl/prefer/${filename%.*}") done
#Load the data for fqname in ./data/*.json; do filename=`basename $fqname` response=$(curl -s -X PUT -H "Content-Type: application/json” -d "@$fqname" "$cloudurl/prefer/${filename%.*}") done
Load Initial Data to Cloud
![Page 36: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/36.jpg)
©2016 Couchbase Inc. 39
body=' { "source": ”cloud", "target": "'$url'", "continuous": false }' response=$(curl -s -X POST -H "Content-Type: application/json” -d "$body" "$cloudurl/_replicate")
body=' { "source": ”cloud", "target": "'$url'", "continuous": false }' response=$(curl -s -X POST -H "Content-Type: application/json” -d "$body" "$cloudurl/_replicate")
body=' { "source": "cloud", "target": "'$url'", "continuous": false }' response=$(curl -s -X POST -H "Content-Type: application/json” -d "$body" "$cloudurl/_replicate")
Replicate Cloud to Plane
![Page 37: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/37.jpg)
©2016 Couchbase Inc. 40
documentChangeListener = new CouchbaseDocumentChangeListener(config.url, config.getChannels()); documentChangeListener.addListener( function(doc) { if(doc.type == "preference_group") { … } } else if(doc.type == "passenger") { } else if(doc.type == "passenger_preferences") { self.passengerPreferences = doc; self.preferenceBeverage = self.selectedBeverage = doc.preferences[0].selectedBeverage; … } } , function(doc) { return true; } ); documentChangeListener.start();
Changes Feed documentChangeListener = new CouchbaseDocumentChangeListener(config.url, config.getChannels()); documentChangeListener.addListener( function(doc) { if(doc.type == "preference_group") { … } } else if(doc.type == "passenger") { } else if(doc.type == "passenger_preferences") { self.passengerPreferences = doc; self.preferenceBeverage = self.selectedBeverage = doc.preferences[0].selectedBeverage; … } } , function(doc) { return true; } ); documentChangeListener.start();
documentChangeListener = new CouchbaseDocumentChangeListener(config.url, config.getChannels()); documentChangeListener.addListener( function(doc) { if(doc.type == "preference_group") { … } } else if(doc.type == "passenger") { } else if(doc.type == "passenger_preferences") { self.passengerPreferences = doc; self.preferenceBeverage = self.selectedBeverage = doc.preferences[0].selectedBeverage; … } } , function(doc) { return true; } ); documentChangeListener.start();
documentChangeListener = new CouchbaseDocumentChangeListener(config.url, config.getChannels()); documentChangeListener.addListener( function(doc) { if(doc.type == "preference_group") { … } } else if(doc.type == "passenger") { } else if(doc.type == "passenger_preferences") { self.passengerPreferences = doc; self.preferenceBeverage = self.selectedBeverage = doc.preferences[0].selectedBeverage; … } } , function(doc) { return true; } ); documentChangeListener.start();
documentChangeListener = new CouchbaseDocumentChangeListener(config.url, config.getChannels()); documentChangeListener.addListener( function(doc) { if(doc.type == "preference_group") { … } } else if(doc.type == "passenger") { } else if(doc.type == "passenger_preferences") { self.passengerPreferences = doc; self.preferenceBeverage = self.selectedBeverage = doc.preferences[0].selectedBeverage; … } } , function(doc) { return true; } ); documentChangeListener.start();
![Page 38: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/38.jpg)
©2016 Couchbase Inc. 41
savepreferences: function (event) { this.passengerPreferences.preferences[0].selectedMixer = this.selectedMixer; … //Push doc to server var url = config.url; url += "/"+this.passengerPreferences._id; url += "?rev="+this.passengerPreferences._rev; var _http = new XMLHttpRequest(); _http.open("PUT", url); _http.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); _http.setRequestHeader( 'Authorization', 'Basic ' + btoa( "p4" + ':' + "p453cur1ty" ) ); _http.withCredentials = true; _http.send(JSON.stringify(this.passengerPreferences)); }
Update Preferences savepreferences: function (event) { this.passengerPreferences.preferences[0].selectedMixer = this.selectedMixer; … //Push doc to server var url = config.url; url += "/"+this.passengerPreferences._id; url += "?rev="+this.passengerPreferences._rev; var _http = new XMLHttpRequest(); _http.open("PUT", url); _http.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); _http.setRequestHeader( 'Authorization', 'Basic ' + btoa( "p4" + ':' + "p453cur1ty" ) ); _http.withCredentials = true; _http.send(JSON.stringify(this.passengerPreferences)); }
savepreferences: function (event) { this.passengerPreferences.preferences[0].selectedMixer = this.selectedMixer; … //Push doc to server var url = config.url; url += "/"+this.passengerPreferences._id; url += "?rev="+this.passengerPreferences._rev; var _http = new XMLHttpRequest(); _http.open("PUT", url); _http.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); _http.setRequestHeader( 'Authorization', 'Basic ' + btoa( "p4" + ':' + "p453cur1ty" ) ); _http.withCredentials = true; _http.send(JSON.stringify(this.passengerPreferences)); }
savepreferences: function (event) { this.passengerPreferences.preferences[0].selectedMixer = this.selectedMixer; … //Push doc to server var url = config.url; url += "/"+this.passengerPreferences._id; url += "?rev="+this.passengerPreferences._rev; var _http = new XMLHttpRequest(); _http.open("PUT", url); _http.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); _http.setRequestHeader( 'Authorization', 'Basic ' + btoa( "p4" + ':' + "p453cur1ty" ) ); _http.withCredentials = true; _http.send(JSON.stringify(this.passengerPreferences)); }
savepreferences: function (event) { this.passengerPreferences.preferences[0].selectedMixer = this.selectedMixer; … //Push doc to server var url = config.url; url += "/"+this.passengerPreferences._id; url += "?rev="+this.passengerPreferences._rev; var _http = new XMLHttpRequest(); _http.open("PUT", url); _http.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); _http.setRequestHeader( 'Authorization', 'Basic ' + btoa( "p4" + ':' + "p453cur1ty" ) ); _http.withCredentials = true; _http.send(JSON.stringify(this.passengerPreferences)); }
![Page 39: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/39.jpg)
©2016 Couchbase Inc. 42
function(doc, oldDoc) { if (doc.type == "flight") { //Add flight details to the public channel visible to all entertainment systems channel("!"); } else if ( doc.type == "preference_group") { //Add preference group docs to the public channel visible to all units channel("!"); } else if (doc.type == "passenger") { //Create a channel for the passenger record channel("passenger-"+doc.passengerid); access(doc.seatnumber,"passenger-"+doc.passengerid); } else if (doc.type == "passenger_preferences") { requireUser(doc.seatnumber); channel("passenger-"+doc.passengerid); } else { //Reject all other document types, they aren’t part of this application throw({forbidden : "Unknown document type"}); } }
Plane Sync Functionfunction(doc, oldDoc) { if (doc.type == "flight") { //Add flight details to the public channel visible to all entertainment systems channel("!"); } else if ( doc.type == "preference_group") { //Add preference group docs to the public channel visible to all units channel("!"); } else if (doc.type == "passenger") { //Create a channel for the passenger record channel("passenger-"+doc.passengerid); access(doc.seatnumber,"passenger-"+doc.passengerid); } else if (doc.type == "passenger_preferences") { requireUser(doc.seatnumber); channel("passenger-"+doc.passengerid); } else { //Reject all other document types, they aren’t part of this application throw({forbidden : "Unknown document type"}); } }
function(doc, oldDoc) { if (doc.type == "flight") { //Add flight details to the public channel visible to all entertainment systems channel("!"); } else if ( doc.type == "preference_group") { //Add preference group docs to the public channel visible to all units channel("!"); } else if (doc.type == "passenger") { //Create a channel for the passenger record channel("passenger-"+doc.passengerid); access(doc.seatnumber,"passenger-"+doc.passengerid); } else if (doc.type == "passenger_preferences") { requireUser(doc.seatnumber); channel("passenger-"+doc.passengerid); } else { //Reject all other document types, they aren’t part of this application throw({forbidden : "Unknown document type"}); } }
function(doc, oldDoc) { if (doc.type == "flight") { //Add flight details to the public channel visible to all entertainment systems channel("!"); } else if ( doc.type == "preference_group") { //Add preference group docs to the public channel visible to all units channel("!"); } else if (doc.type == "passenger") { //Create a channel for the passenger record channel("passenger-"+doc.passengerid); access(doc.seatnumber,"passenger-"+doc.passengerid); } else if (doc.type == "passenger_preferences") { requireUser(doc.seatnumber); channel("passenger-"+doc.passengerid); } else { //Reject all other document types, they aren’t part of this application throw({forbidden : "Unknown document type"}); } }
function(doc, oldDoc) { if (doc.type == "flight") { //Add flight details to the public channel visible to all entertainment systems channel("!"); } else if ( doc.type == "preference_group") { //Add preference group docs to the public channel visible to all units channel("!"); } else if (doc.type == "passenger") { //Create a channel for the passenger record channel("passenger-"+doc.passengerid); access(doc.seatnumber,"passenger-"+doc.passengerid); } else if (doc.type == "passenger_preferences") { requireUser(doc.seatnumber); channel("passenger-"+doc.passengerid); } else { //Reject all other document types, they aren’t part of this application throw({forbidden : "Unknown document type"}); } }
function(doc, oldDoc) { if (doc.type == "flight") { //Add flight details to the public channel visible to all entertainment systems channel("!"); } else if ( doc.type == "preference_group") { //Add preference group docs to the public channel visible to all units channel("!"); } else if (doc.type == "passenger") { //Create a channel for the passenger record channel("passenger-"+doc.passengerid); access(doc.seatnumber,"passenger-"+doc.passengerid); } else if (doc.type == "passenger_preferences") { requireUser(doc.seatnumber); channel("passenger-"+doc.passengerid); } else { //Reject all other document types, they aren’t part of this application throw({forbidden : "Unknown document type"}); } }
function(doc, oldDoc) { if (doc.type == "flight") { //Add flight details to the public channel visible to all entertainment systems channel("!"); } else if ( doc.type == "preference_group") { //Add preference group docs to the public channel visible to all units channel("!"); } else if (doc.type == "passenger") { //Create a channel for the passenger record channel("passenger-"+doc.passengerid); access(doc.seatnumber,"passenger-"+doc.passengerid); } else if (doc.type == "passenger_preferences") { requireUser(doc.seatnumber); channel("passenger-"+doc.passengerid); } else { //Reject all other document types, they aren’t part of this application throw({forbidden : "Unknown document type"}); } }
![Page 40: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/40.jpg)
©2016 Couchbase Inc. 43
Summary
![Page 41: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/41.jpg)
©2016 Couchbase Inc.
Q&A
![Page 42: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/42.jpg)
©2016 Couchbase Inc. 45
![Page 43: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/43.jpg)
©2016 Couchbase Inc. 46
Share your opinion on Couchbase
1. Go here: http://gtnr.it/2eRxYWn
2. Create a profile
3. Provide feedback (~15 minutes)
![Page 44: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016](https://reader036.vdocuments.us/reader036/viewer/2022062412/5874f6201a28ab917a8b7edb/html5/thumbnails/44.jpg)
©2016 Couchbase Inc. 47
The Couchbase Connect16 mobile appTake our in-app survey!