Developing with Couchbase Part               I:         Getting Started                 Matt Ingenthron              Direc...
GETTING STARTED:DEVELOPMENT ENVIRONMENT                          2
Development Environment: Development DB• Downloads at couchbase.com/download • Linux: Ubuntu and Red Hat/CentOS    – Packa...
Development Environment: Obtaining a Client• High performance, official client libraries for Java, .NET,  PHP, Ruby, C• He...
Client Setup: Getting Cluster Configuration    Couchbase Client                           Cluster Configuration           ...
Client at Runtime: Adding a node            Couchbase Client                                               New node       ...
Client Set up at a Code Level// Set up at least two URIs in case one server failsURI oneserver = new URI("http://10.1.6.17...
Operations Available to a Client of Couchbase Server• Store Operations   – Add: Store the document if it does not yet exis...
Common Questions with MetadataDocument Metadata:•   TTL•   CAS value•   FlagsQ: What happens to a document persisted after...
Distributed System Design: Concurrency Controls                                         Actor 1              Actor 2 • Com...
INTRODUCING DOCUMENTS                        11
A JSON Document                                       The primary{                                          key    "_id": ...
Other Documents and Document Relationships{   "_id": "beer_Hoptimus_Prime",    "abv": 10.0,    "brewery": "Legacy Brewing ...
Adding (a document) to the Bucket of Beers • Simply create the document, then add  <?php  Include "Couchbase.php";  $cb = ...
Simplicity of Document Oriented Datastore• Schema is optional   – Technically, each document has an implicit schema   – Ex...
Adding a Document: Observations and Considerations• Observations   – Conversion to document was very simple, many JSON opt...
Common Questions when Adopting CouchbaseQ: What if I need to fetch referenced documents?A: Simply get them one after anoth...
COUCHBASE SERVER 2.0COMPATIBLE LIBRARY FEATURES                              18
Couchbase Server 2.0: Views  • Views can spread a few different uses     – Simple secondary indexes (the most common)     ...
Q&A      21
OTHER EXAMPLE DOCUMENTS                          22
Storing a Message DocumentDocument:{  "from": "user_512",  "to": "user_768",  "text": "Hey, that Beer you recommended is p...
User Profile Document{    "user_id": 512,    "name": "Beer Likington",    "email": "beer.like@gmail.com",    "sign_up_time...
Game Score Document{    "game_id": 12415115,    "scores": {       "user_a": {         "user_id": 512,         "score_a": 1...
Photo Metadata Document{    "photo_id": "ccbcdeadbeefacee",    "size": {      "w": 500,      "h": 320,      "unit", "px"  ...
Upcoming SlideShare
Loading in...5
×

CouchConf Tokyo Developing with Couchbase Part I

3,745

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,745
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
34
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide
  • By design, installation of couchbase server is easy.
  • Again, quick. show it is all simple:gem install, easy_install, peclisntall, mvnisnstall, etc ...
  • TODO: replace couchbase server with a logo
  • 1. _ids2. ignore _rev3. data types
  • TODO: find a real brewery documentThere is a different schema between this beer and it&apos;s brewery. Obviously, there is a relationship but while a beer has an address, it&apos;s pretty temporary. A brewery probably technically has an alcohol by volume, but it&apos;s not commonly measured or tracked.
  • GetSetDeleteAdd/Replace
  • [FIXME] Title
  • CouchConf Tokyo Developing with Couchbase Part I

    1. 1. Developing with Couchbase Part I: Getting Started Matt Ingenthron Director, Developer Solutions 1
    2. 2. GETTING STARTED:DEVELOPMENT ENVIRONMENT 2
    3. 3. Development Environment: Development DB• Downloads at couchbase.com/download • Linux: Ubuntu and Red Hat/CentOS – Packages for most common distributions. • dpkg -i , rpm -i, etc. • Mac – Download a .zip, open, drag to Applications, • Windows – Download a setup.exe, double click • Provision via wizard in Web Console – Or provision via REST interface: operations folks to automate provisioning (i.e Chef, puppet, Rightscale rightscript) 3
    4. 4. Development Environment: Obtaining a Client• High performance, official client libraries for Java, .NET, PHP, Ruby, C• Head to couchbase.com/develop for SDKs where you will find – Client libraries – Screencasts on Getting Started – Getting started guides – Tutorial with a sample application – A complete API reference 4
    5. 5. Client Setup: Getting Cluster Configuration Couchbase Client Cluster Configuration over REST {
… "bucketCapabilities": [
 "touch", 
 "sync", 
 "name": "default", 
 "nodeLocator": "vbucket", 
 …. http://myserver:8091/pools Couchbas Couchbas Couchbas Couchbas e Server e Server e Server e Server Node Node Node Node 5
    6. 6. Client at Runtime: Adding a node Couchbase Client New node Cluster coming online Topology UpdateCouchbas Couchbas Couchbas Couchbas Couchbas e Server e Server e Server e Server e Server Node Node Node Node Node 6
    7. 7. Client Set up at a Code Level// Set up at least two URIs in case one server failsURI oneserver = new URI("http://10.1.6.171:8091/pools/");URI twoserver = new URI("http://10.1.6.172:8091/pools/");List<URI> servers = new ArrayList<URI>();servers.add(oneserver);servers.add(twoserver);// Now create a client talking to the default bucketCouchbaseClient cbc = new CouchbaseClient(servers, "default", "");System.err.println(cbc.get("MattIngenthron") + " is off developing with Couchbase!"); Use the Java client with your favorite JSON library: Jettison, Google GSON, etc. 7
    8. 8. Operations Available to a Client of Couchbase Server• Store Operations – Add: Store the document if it does not yet exist – Set: Store the document, overwriting existing if necessary• Retrieve Operations – Get: Fetch the document – Get and touch: Fetch the document and update the TTL – Multiget: Fetch multiple documents at the same time• Update operations – Append/prepend: Add data in front of or on the end of a document – Delete: Remove the document from the store – Compare and Swap (CAS): Replace the current document, if CAS matches – Replace: Replace the document if it exists, otherwise do not – Touch: Update the TTL for a document 8
    9. 9. Common Questions with MetadataDocument Metadata:• TTL• CAS value• FlagsQ: What happens to a document persisted after it’s TTL?A: A regular background job will remove expired documents.Q: How do I use flags?A: Frequently used to identify data type or other attributes, such ascompression. Behavior varies from client to client. 9
    10. 10. Distributed System Design: Concurrency Controls Actor 1 Actor 2 • Compare and Swap Operations – Often referred to as “CAS” – Optimistic concurrency control Success CAS mismatch – Available with many mutation operations, depending on client. • Get with Lock Couchbase Server – Often referred to as “GETL” – Pessimistic concurrency control – Locks have a short TTL A – Locks released with CAS operations – Useful when working with object B C D graphs F E 10
    11. 11. INTRODUCING DOCUMENTS 11
    12. 12. A JSON Document The primary{ key "_id": "beer_Hoptimus_Prime", "abv": 10.0, "brewery": "Legacy Brewing Co.", A float "category": "North American Ale", "name": "Hoptimus Prime", "style": "Imperial or Double India Pale Ale", "updated": [2010, 7, 22, 20, 0, 20], "available": true} Date time as A Boolean array 12
    13. 13. Other Documents and Document Relationships{ "_id": "beer_Hoptimus_Prime", "abv": 10.0, "brewery": "Legacy Brewing Co.", "category": "North American Ale", "name": "Hoptimus Prime", "style": “Double India Pale Ale", "updated": [2010, 7, 22, 20, 0, 20], "available": true } { "_id": "Legacy Brewing Co.", "address": "525 Canal Street Reading, Pennsylvania, 19601 United States", "updated": "2010-07-22 20:00:20", "latitude": -75.928469, "longitude": 40.325725} 13
    14. 14. Adding (a document) to the Bucket of Beers • Simply create the document, then add <?php Include "Couchbase.php"; $cb = new Couchbase; $cb->addCouchbaseServer("http://localhost:8091"); // defaults to the “default” bucket // a very simple brew $mybrew = new stdObj; $mybrew->brewery = "The Kitchen"; $cb->set("beer_My_Brew", json_encode($mybrew)); 14
    15. 15. Simplicity of Document Oriented Datastore• Schema is optional – Technically, each document has an implicit schema – Extend the schema at any time! • Need a new field? Add it. Define a default for similar objects which may not have this field yet.• Data is self-contained – Documents more naturally support the world around you, the data structures around you• Model data for your App/Code instead for the Database 15
    16. 16. Adding a Document: Observations and Considerations• Observations – Conversion to document was very simple, many JSON options – Flexible schema: Did not need to add the latitude and longitude of my kitchen – Flexible schema: Can add the brewery detail later• Considerations – Why use a particular key/_id : "beer_My_Brew” – Should I have a TTL? 16
    17. 17. Common Questions when Adopting CouchbaseQ: What if I need to fetch referenced documents?A: Simply get them one after another. It’s very fast owing to our cache andstorage model.Q: How can I update just a small portion of a document?A: The best approach is to keep the document model live in your application, thenuse CAS operations to store modified documents. The Ruby sample applicationhas a good example.Q: I currently use serialized objects with memcached or Membase, can I do this stillwith Couchbase Server?A: Absolutely! Everything previously supported and used is still there. JSON offersadvantages with heterogenenous platform support and preparing for Couchbase2.0 views. 17
    18. 18. COUCHBASE SERVER 2.0COMPATIBLE LIBRARY FEATURES 18
    19. 19. Couchbase Server 2.0: Views • Views can spread a few different uses – Simple secondary indexes (the most common) – Aggregation functions • Example: count the number of North American Ales – Organizing related data 19
    20. 20. Q&A 21
    21. 21. OTHER EXAMPLE DOCUMENTS 22
    22. 22. Storing a Message DocumentDocument:{ "from": "user_512", "to": "user_768", "text": "Hey, that Beer you recommended is pretty fab, thx!" "sent_timestamp": 1326476560}<?php// store it$cb = new Couchbase;$cb->addCouchbaseServer("localhost");$cb->set("message_1024", $message); 23
    23. 23. User Profile Document{ "user_id": 512, "name": "Beer Likington", "email": "beer.like@gmail.com", "sign_up_timestamp": 1224612317, "last_login_timestamp": 1245613101}{ "user_id": 768, "name": "Simon Neal", "email": "sneal@gmail.com", "sign_up_timestamp": 1225554317, "last_login_timestamp": 1234166701, "country": "Scotland", "pro_account" true, "friends": [512, 666, 742, 1111]} 24
    24. 24. Game Score Document{ "game_id": 12415115, "scores": { "user_a": { "user_id": 512, "score_a": 1, "score_b": 57, "score_c": 24 }, "user_b": { "user_id": 768, "score_a": 3, "score_b": 67, "score_c": 15 } }, "score_timestamp": 1348560842} 25
    25. 25. Photo Metadata Document{ "photo_id": "ccbcdeadbeefacee", "size": { "w": 500, "h": 320, "unit", "px" }, "exposure: "1/1082", "aperture": "f/2.4", "flash": false, "camera": { "name": "iPhone 4S", "manufacturer": "Apple", } "user_id": 512, "timestamp": [2011, 12, 13, 16, 31, 07]} 26
    1. A particular slide catching your eye?

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

    ×