Developing with Couchbase Part III:       Using the Client Libraries                     John Zablocki                    ...
About Me{    " _id" : "John Zablocki”,    "Title" : "Developer Advocate",    "Company" : "Couchbase",    "Books" :    [   ...
Agenda●   Documents, Objects and Schemas●   View Review●   .NET Client API●   Demo: TapMap●   Q&A
PreambleAll examples are in C# using the Couchbase .NET Client Library 1.2 (Developer Preview)Download at couchbase.com/de...
View ReviewDocuments, Objects   View Review   .NET View API   and Schemas                                                 ...
Remember when we said that Couchbase    documents were schema-less?                                       6
Well, it’s not quite that simple…                                    7
Recall those beer documents…{    "_id": "beer_abbey_ale",    "type": "beer",    "name": "Abbey Ale",    "brewery": "brewer...
Where did it come from?                          9
A C# Class  public class Beer  {    public string Id { get; set; }                    a                                   ...
Your object model often becomes your          schema, but how?                                       11
A C# Class  [Serializable]  public class Beer  {     [JsonProperty(PropertyName = "_id")]                                 ...
Storing your model in C#  var key = “beer_Three_Philosophers”;  var getResult = client.GetWithCas(key);  var beer = getRes...
View ReviewDocuments, Objects   View Review   .NET View API   and Schemas                                                 ...
These Couchbase guys really like their beer…                                          15
Yeah, we do…               16
It’s a much more interestingdata source than Northwind, no?                                  17
Beer Documents                                     e key                                  iqu{                            ...
Let’s create an index on beer name…_design/beers/_view/by_name// map functionfunction (doc) {  if (doc.type == "beer“ && b...
.NET View APIDocuments, Objects   View Review   .NET View API   and Schemas                                               ...
Calling the view from .NET                                      c                  me                                    d...
Finding a beer by name…_design/beers/_view/by_name?key=“Abbey Ale”via .NET                                       h        ...
Finding a range of beers by name…_design/beers/_view/by_name?startkey=“A”&endkey=“D”var view = client.GetView("beers", "by...
Limiting and skipping beers…_design/beers/_view/by_name?limit=10&skip=2var view = client.GetView("beers", "by_name")      ...
Finding a strong ale…The viewfunction (doc) {  if (doc.type == "beer" && doc.style &&doc.abv) {     emit([doc.style, doc.a...
Finding a strong ale…C# Examplevar view = client.GetView("beers","by_style_and_abv")          .StartKey(new object[] { “Al...
Finding breweries by provinceThe brewery document{     "_id": "brewery_cottrell_brewing",     "_rev": "1-00003e56c0e830c80...
Finding breweries by provinceThe map functionfunction (doc) {  if (doc.type == "brewery" && doc.province) {         emit(d...
Map/Reduce – Map Results• The conceptual output of the map function is   [{"key":"Connecticut", "value":"Cottrell Brewing"...
Map/Reduce – Reduce Function• A reduce function to count breweries by province      – Or simply use the build in _count fu...
Map/Reduce – Reduce Results • The conceptual result of the reduce is {"key":"Connecticut","value":2},    {"key":"Massachus...
Map/Reduce .NET Code_design/beers/_view/by_name?limit=10&skip=2var view = client.GetView(“breweries", "by_province")      ...
Demo:                                   TapMapDocuments, Objects   View Review    .NET View API   and Schemas             ...
TapMap
TapMap Info•   Written in C#, with ASP.NET MVC 4•   Code available at: http://github.com/couchbaselabs/TapMap•   Demonstra...
Q&ADocuments, Objects   View Review   .NET View API   and Schemas                                                   Demo: ...
Upcoming SlideShare
Loading in...5
×

Developing couchbase part iii advanced app dev

2,116

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,116
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
16
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • make JS code screenshot of admin UI or show admin UI
  • Developing couchbase part iii advanced app dev

    1. 1. Developing with Couchbase Part III: Using the Client Libraries John Zablocki Developer Advocate @codevoyeur 1
    2. 2. About Me{ " _id" : "John Zablocki”, "Title" : "Developer Advocate", "Company" : "Couchbase", "Books" : [ { "Title" : "Orchard CMS", "Publisher" : "OReilly" } ], "Twitter" : "@CodeVoyeur", "Email" : "john@couchbase.com", "Meetup" : "Beantown ALT.NET“, "Code" : [ "https://github.com/jzablocki", http://bitbucket.com/johnzablockis ], "Blogs" : [ "http://dllhel.net", "http://blog.couchbase.com" ]}
    3. 3. Agenda● Documents, Objects and Schemas● View Review● .NET Client API● Demo: TapMap● Q&A
    4. 4. PreambleAll examples are in C# using the Couchbase .NET Client Library 1.2 (Developer Preview)Download at couchbase.com/develop/net/nextHeres how to connect to Couchbase Server:var config = new CouchbaseClientConfiguration();config.Urls.Add(new Uri(http://192.168.1.2:/8091/pools/default));config.Urls.Add(new Uri(http://192.168.1.3:/8091/pools/default));config.Bucket = “protected”;config.BucketPassword = “s3cr3t”;var client = new CouchbaseClient(config); 4
    5. 5. View ReviewDocuments, Objects View Review .NET View API and Schemas Demo: Q&A TapMap
    6. 6. Remember when we said that Couchbase documents were schema-less? 6
    7. 7. Well, it’s not quite that simple… 7
    8. 8. Recall those beer documents…{ "_id": "beer_abbey_ale", "type": "beer", "name": "Abbey Ale", "brewery": "brewery_Brewery_Ommegang", "abv": 7.1, "style": "Ale" A sc} hem a 8
    9. 9. Where did it come from? 9
    10. 10. A C# Class public class Beer { public string Id { get; set; } a m A sche public string Name { get; set; } public double ABV { get; set; } public override string Type { get { return "beer"; } } } 10
    11. 11. Your object model often becomes your schema, but how? 11
    12. 12. A C# Class [Serializable] public class Beer { [JsonProperty(PropertyName = "_id")] g public string Id { get; set; } am appin As chem [JsonProperty("name")] public string Name { get; set; } [JsonProperty("abv")] public double ABV { get; set; } [JsonProperty(“type")] public override string Type { get { return "beer"; } } } 12
    13. 13. Storing your model in C# var key = “beer_Three_Philosophers”; var getResult = client.GetWithCas(key); var beer = getResult.Result; ation beer.Name = “Three Philosophers”; e mafic Sch var json = JsonConvert.Serialize(beer); var casResult = client.Cas(StoreMode.Set, key, json, getResult.Cas); ! var message = casResult.Result Yum ? “Success” : “Failure”; Console.WriteLine(message); 13
    14. 14. View ReviewDocuments, Objects View Review .NET View API and Schemas Demo: Qestions TapMap
    15. 15. These Couchbase guys really like their beer… 15
    16. 16. Yeah, we do… 16
    17. 17. It’s a much more interestingdata source than Northwind, no? 17
    18. 18. Beer Documents e key iqu{ Un "_id": "beer_abbey_ale", "_rev": "1-00003e56befe4b4f0000005600000112", e typ "$flags": 0, ent eer "$expiration": 0, Do cum eb som "type": "beer", A we "name": "Abbey Ale", "brewery": "brewery_brewery_ommegang", "abv": 7.1} 18
    19. 19. Let’s create an index on beer name…_design/beers/_view/by_name// map functionfunction (doc) { if (doc.type == "beer“ && beer.name) { emit(doc.name, null); }}The results…[{"id":"beer_abbey_ale","key":"Abbey Ale","value":null},{"id":"beer_american_ale","key":"American Ale","value":null},{"id":"beer_harpoon_ipa","key":"Harpoon IPA","value":null},{"id":"beer_long_trail_ale","key":"Long Trail Ale","value":null},{"id":"beer_old_yankee_ale","key":"Old Yankee Ale","value":null},{"id":"beer_three_philosophers","key":"Three Philosophers","value":null}] 19
    20. 20. .NET View APIDocuments, Objects View Review .NET View API and Schemas Demo: Qestions TapMap
    21. 21. Calling the view from .NET c me do navia .NET sign iew De Vvar view = client.GetView("beers", key ent cum"by_name"); Doforeach(var item in view) { var beer =client.Get<Beer>(item.ItemId); Console.WriteLine(beer.Name);} 21
    22. 22. Finding a beer by name…_design/beers/_view/by_name?key=“Abbey Ale”via .NET h m atc ct Exavar view = client.GetView("beers", "by_name") .Key(“Abbey Ale”) .FirstOrDefault();var beer = client.Get<Beer>(item.ItemId); 22
    23. 23. Finding a range of beers by name…_design/beers/_view/by_name?startkey=“A”&endkey=“D”var view = client.GetView("beers", "by_name") .StartKey(“A”).EndKey(“D”);foreach(var item in view) { var beer = client.Get<Beer>(item.ItemId); Console.WriteLine(beer.Name);} 23
    24. 24. Limiting and skipping beers…_design/beers/_view/by_name?limit=10&skip=2var view = client.GetView("beers", "by_name") .Limit(5).Skip(5);foreach(var item in view) { var beer = client.Get<Beer>(item.ItemId); Console.WriteLine(beer.Name);} 24
    25. 25. Finding a strong ale…The viewfunction (doc) { if (doc.type == "beer" && doc.style &&doc.abv) { emit([doc.style, doc.abv], null); }} 25
    26. 26. Finding a strong ale…C# Examplevar view = client.GetView("beers","by_style_and_abv") .StartKey(new object[] { “Ale”, 6.0 }) .EndKey(new object[] { “Ale”, 10 });foreach(var item in view) { var beer = client.Get<Beer>(item.ItemId); Console.WriteLine(beer.Name);} 26
    27. 27. Finding breweries by provinceThe brewery document{ "_id": "brewery_cottrell_brewing", "_rev": "1-00003e56c0e830c80000005900000112", "$flags": 0, "$expiration": 0, "type": "brewery", "name": "Cottrell Brewing", "city": "Pawcatuck", "province": "Connecticut"} 27
    28. 28. Finding breweries by provinceThe map functionfunction (doc) { if (doc.type == "brewery" && doc.province) { emit(doc.province, doc.name); }} 28
    29. 29. Map/Reduce – Map Results• The conceptual output of the map function is [{"key":"Connecticut", "value":"Cottrell Brewing"}, {"key":"Connecticut","value":"Thomas Hooker Brewing Co."},{"key":"Massachusetts","value":"Harpoon Brewing Company"}, {"key":"New York","value":"Brewery Ommegang"},{"key":"Vermont","value":"Long Trail Brewing Company"}]
    30. 30. Map/Reduce – Reduce Function• A reduce function to count breweries by province – Or simply use the build in _count function function (keys, values) { return values.length;}• The conceptual input to the reduce function is:[{"keys":["Connecticut", "Connecticut"], "values": ["Cottrell Brewing", "Thomas Hooker Brewing Co."]}, {"keys":["Massachusetts"],"values":["Harpoon Brewing Co."]}, {"keys":["New York"],"values":["Brewery Ommegang"]},{"keys":["Vermont"],"values":["Long Trail Brewing Company“]}]
    31. 31. Map/Reduce – Reduce Results • The conceptual result of the reduce is {"key":"Connecticut","value":2}, {"key":"Massachusetts","value":1}, {"key":"New York","value":1}, {"key":"Vermont","value":1}
    32. 32. Map/Reduce .NET Code_design/beers/_view/by_name?limit=10&skip=2var view = client.GetView(“breweries", "by_province") .Group(true);foreach(var item in view) { Console.WriteLine(item.ItemId);}
    33. 33. Demo: TapMapDocuments, Objects View Review .NET View API and Schemas Demo: Qestions TapMap
    34. 34. TapMap
    35. 35. TapMap Info• Written in C#, with ASP.NET MVC 4• Code available at: http://github.com/couchbaselabs/TapMap• Demonstrates common web app behaviors using Couchbase Server 2.0 – Find a user in the database by username and password – When creating a new user, verify a username and email are unique – Filter a select list data source from the value of another – Show data items on a map• Demonstrates using a client library with common architectural patterns – Working with a Repository of T – Creating a domain models • Document mapping • Model inheritance • Model composition – Managing the client resources
    36. 36. Q&ADocuments, Objects View Review .NET View API and Schemas Demo: Q&A TapMap
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×