+ All Categories
Home > Software > Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

Date post: 15-Apr-2017
Category:
Upload: couchbase
View: 152 times
Download: 7 times
Share this document with a friend
44
©2016 Couchbase Inc. 1 The Couchbase Connect16 mobile app Take our in-app survey!
Transcript
Page 1: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©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

©2016 Couchbase Inc. 2

Questions? Tweet #Couchbase #SG

Page 3: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 4

Building Personalized Experiences

Using Couchbase Sync Gateway

Page 4: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©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

©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

©2016 Couchbase Inc. 8

Sync Gateway Platform Features

Page 7: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 9

ReST + Stream + BatchAPI

(Swagger)

Page 8: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 10

DocumentDatabase

Page 9: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 11www.flickr.com/photos/xmodulo

Blobs

Page 10: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©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

©2016 Couchbase Inc. 13

Page 12: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 14

Page 13: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 15

RBAC placeholder

Photograph taken by Dori ([email protected])

Authorization

Page 14: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 16

Security

Page 15: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 17

Page 16: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 18

Cross ClusterSync

CBServer

SyncGateway

Page 17: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 19

STATE

Page 18: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 20

SmallFootprint

Page 19: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 21

Page 20: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 23

Page 21: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©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

©2016 Couchbase Inc.

Business

Logic

Page 23: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 26

ChannelSync

Function

Sync FunctionData routing

Business Logic

Page 24: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 27

Digital Signage

Page 25: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 28Photo courtesy of OnSign TV (CC BY 2.0)

Page 26: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 29

Page 27: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 30

Page 28: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 31

Page 29: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 32

Page 30: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 33

Page 31: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 34

Personalized Preferences

Live Demo

Page 32: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc.

Flow

Page 33: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc.

Live Demo

Page 34: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 37

CODE

Page 35: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©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

©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

©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

©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

©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

©2016 Couchbase Inc. 43

Summary

Page 41: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc.

Q&A

Page 42: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©2016 Couchbase Inc. 45

Page 43: Building personalized experiences using Couchbase Sync Gateway – Couchbase Connect 2016

©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

©2016 Couchbase Inc. 47

The Couchbase Connect16 mobile appTake our in-app survey!


Recommended