Couchbase Server with CoreOS and Kubernetes: Couchbase Connect 2015
Developing Mobile Apps for .NET: Couchbase Connect 2014
-
Upload
couchbase -
Category
Data & Analytics
-
view
350 -
download
1
description
Transcript of Developing Mobile Apps for .NET: Couchbase Connect 2014
![Page 1: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/1.jpg)
Developing Mobile Apps for .NET
Zack Gramana | Senior Software Engineer, Couchbase
![Page 2: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/2.jpg)
Couchbase Lite In A Nutshell
![Page 3: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/3.jpg)
Highlights
• Document Database
• Map Reduce Queries
• Sync
• Small: Assembly is < 500KB
![Page 4: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/4.jpg)
Document Database Overview
• Semi-structured
• Key-value pairs
• Schemaless
• JSON-backed
• Very low-friction
![Page 5: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/5.jpg)
Map Reduce Queries Overview
• Functional queries, instead of set-theoretic
• Write query logic in pure C#, not SQL
• Can be one-off, or auto-updating as data
changes
• You probably already know how to use it:
– Map is like LINQ’s Select method
– Reduce is like LINQ’s Aggregate method
![Page 6: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/6.jpg)
Sync Overview
• Master-master replication
• Uses HTTP + REST
• Offline mode for free
• Manual or continuous modes
• Automatic retry on failure
• Responds to network changes
![Page 7: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/7.jpg)
Programming Model
• You: make your changes to docs
• Queries: will reflect those changes
• Replicators: sync changes for you
![Page 8: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/8.jpg)
Getting Started with Documents
![Page 9: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/9.jpg)
Opening a Database
var db = Manager.SharedInstance.GetDatabase("foo");
Debug.Assert(db != null);
var db = Manager.SharedInstance.GetExistingDatabase("foo");
Debug.Assert(db == null);
![Page 10: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/10.jpg)
Getting a Document
var doc = db.GetDocument("foo-doc");
Debug.Assert(doc != null);
var doc = db.GetExistingDocument("foo-doc");
Debug.Assert(doc == null);
![Page 11: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/11.jpg)
Creating a Document
var doc = db.CreateDocument();
Debug.Assert(doc.Id != null);
![Page 12: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/12.jpg)
Deleting a Document
doc.Delete();
Debug.Assert(doc.Deleted);
![Page 13: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/13.jpg)
Updating a New Document
var rev = doc.CreateRevision();
var props = new Dictionary<string, object>
{
{ "foo", "bar"},
{ "fizz", "buzz"}
};
rev.SetUserProperties(props);
rev.Save();
![Page 14: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/14.jpg)
Updating an Existing Document
var props = doc.Properties;
var newProps = new Dictionary<string, object>(props)
{
{ "foo", "bar"}
};
doc.PutProperties(newProps); // Saves a new revision
![Page 15: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/15.jpg)
Dealing with Changes
doc.Change += (sender, e) => {
// e.g. if we get a conflict...if (e.Change.IsConflict){
// we can resolve it!}
};
![Page 16: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/16.jpg)
DocumentChange Members
String
Boolean
Boolean
String
Uri
RevisionInternal
DocumentId
IsConflict
IsCurrentRevision
RevisionId
SourceUrl
WinningRevision
![Page 17: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/17.jpg)
Handling Conflicts
var current = doc.CurrentRevision;foreach(var rev in doc.ConflictingRevisions){
var newRev = rev.CreateRevision();if (rev.Equals(current)) {
newRev.SetProperties(mergedProps);} else {
newRev.IsDeletion = true;}newRev.Save();
}
![Page 18: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/18.jpg)
Auto-merging Properties using LINQ
Dictionary<string, object> mergedProps;
try
{
mergedProps = doc.ConflictingRevisions
.SelectMany(rev => rev.UserProperties)
.Distinct()
.ToDictionary(
kvp => kvp.Key,
kvp => kvp.Value
);
} catch (ArgumentException ex) {
// Merge conflict requires manual resolution.
}
![Page 19: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/19.jpg)
Getting Started with Queries
![Page 20: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/20.jpg)
Create a View
var view = db.GetView("foo");
Debug.Assert(view != null);
var view = db.GetExistingView("foo");
Debug.Assert(view == null);
![Page 21: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/21.jpg)
Add a Map Function
view.SetMap((doc, emit) =>
{
var foo = (String)doc["foo"];
if (foo.Equals("bar")) {
emit ("text", doc["text"]);
}
}, "1");
![Page 22: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/22.jpg)
Using a Reduce Function
ReduceDelegate reducer = (keys, values, rereduce) => {
var i = 0; var wordCount = 0;foreach(var key in keys) {
if (key == "text") {var str = (String)values[i];wordCount += str.Split(' ').Length;
}}return wordCount;
};view.SetMapReduce(mapper, reducer, "1");
![Page 23: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/23.jpg)
Create a Query
var query = view.CreateQuery();
// Options, like...
query.Completed += (sender, e) => {Log("Results: {0}", e.Rows);
};
query.Descending = true;
// Get records...
var rows = await query.RunAsync();rows.Where(row => ...);
![Page 24: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/24.jpg)
Create a LiveQuery
var liveQuery = query.ToLiveQuery();
// Respond to changes in the view.
liveQuery.Changed += (sender, e) =>
{
Log("Updates: {0}", e.Rows.Count);
};
![Page 25: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/25.jpg)
Getting Started with Replication
![Page 26: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/26.jpg)
Pull Replicator
var uri = new Uri(syncGatewayUrl);
var pull = db.CreatePullReplication(uri);
pull.Continuous = true;
pull.Changed += ReplicationChanged;
pull.Start();
![Page 27: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/27.jpg)
Push Replicator
var uri = new Uri(syncGatewayUrl);
var push = db.CreatePushReplication(uri);
push.Continuous = true;
push.Changed += ReplicationChanged;
push.Start();
![Page 28: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/28.jpg)
Next Steps
![Page 29: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/29.jpg)
Couchbase Developer Portaldeveloper.couchbase.com/mobile
![Page 30: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/30.jpg)
Xamarin Component Store
https://components.xamarin.com/view/couchb
ase-lite-net
![Page 31: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/31.jpg)
Nugethttps://www.nuget.org/packages/couchbase.lite/
![Page 32: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/32.jpg)
Questions and Answers
![Page 33: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/33.jpg)
Additional Resources
![Page 34: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/34.jpg)
Mailing List
groups.google.com/d/forum/mobile-
couchbase
![Page 36: Developing Mobile Apps for .NET: Couchbase Connect 2014](https://reader034.fdocuments.net/reader034/viewer/2022052602/559c1c8e1a28ab0f158b4662/html5/thumbnails/36.jpg)
Thanks!
©2014 Couchbase, Inc. 36