CouchConf London Developing with Couchbase I: Getting Started
-
Upload
couchbase -
Category
Technology
-
view
533 -
download
0
Transcript of CouchConf London Developing with Couchbase I: Getting Started
![Page 1: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/1.jpg)
1
Developing with Couchbase Part I: Ge:ng Started
Raghavan “Rags” Srinivas Developer Advocate [email protected]
![Page 2: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/2.jpg)
2
• Architect and Evangelist working with developers • Speaker at JavaOne, RSA conferences, Sun Tech Days, JUGs and other developer conferences
• Taught undergrad and grad courses • Technology Evangelist at Sun Microsystems for 10+ years
• SQll trying to understand and work more effecQvely on Java and distributed systems
• Couchbase Developer Advocate working with Java and Ruby developers
• Philosophy: “Be#er to have an unanswered ques1on than a unques1oned answer”
Speaker IntroducQon
![Page 3: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/3.jpg)
3
• Ge:ng Started • An introducQon to Documents with Couchbase • Couchbase server 2.0 compaQble client libraries • Resources and Summary • Q/A
Agenda
![Page 4: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/4.jpg)
4
GETTING STARTED: DEVELOPMENT ENVIRONMENT
![Page 5: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/5.jpg)
5
Development Environment: Development DB
• Downloads at couchbase.com/download
5
• Provision via wizard in Web Console – Or provision via REST interface: operaQons folks to automate provisioning
(i.e Chef, puppet, Rightscale rightscript)
• Linux: Ubuntu and Red Hat/CentOS – Packages for most common
distribuQons. • dpkg -‐i , rpm -‐i, etc.
• Mac – Download a .zip, open, drag to
ApplicaQons,
• Windows – Download a setup.exe, double click
![Page 6: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/6.jpg)
6
Development Environment: Obtaining a Client
• High performance, official client libraries for Java, .NET, PHP, Ruby, C, Python*
• Head to couchbase.com/develop for SDKs where you will find – Client libraries – Screencasts on Ge:ng Started – Ge:ng started guides – Tutorial with a sample applicaQon – A complete API reference
*Current version 0.6 as of 2012-‐03-‐13
![Page 7: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/7.jpg)
7
Client Setup: Ge:ng Cluster ConfiguraQon
7
Couchbase Server Node
Couchbase Client
h2p://myserver:8091/
{ … "bucketCapabilities": [ "touch", "sync", "couchapi" ], "bucketCapabilitiesVer": "sync-1.0", "bucketType": ”couchbase", "name": "default", "nodeLocator": "vbucket", "nodes": [ ….
Cluster ConfiguraQon over REST
Couchbase Server Node
Couchbase Server Node
Couchbase Server Node
![Page 8: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/8.jpg)
8
Client at RunQme: Adding a node
8
Couchbase Client
Couchbase Server Node
Couchbase Server Node
Couchbase Server Node
Couchbase Server Node
Couchbase Server Node
Cluster ���Topology���Update
New node coming online
![Page 9: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/9.jpg)
9
Client Set up at a Code Level
// Set up at least two URIs in case one server fails!URI server = new URI("http://10.1.6.171:8091/pools/");!List<URI> servers = new ArrayList<URI>(); servers.add(server);!!!// Now create a client talking to the default bucket!CouchbaseClient cbc = new CouchbaseClient(servers, "default", "");!!System.err.println(cbc.get(“Rags") + ! " is off Minding the Gap!!");!
Use the Java client with your favorite JSON library: Je@son, Google GSON, etc. Use other client libraries such as yajl for Ruby
![Page 10: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/10.jpg)
10
OperaQons Available to a Client of Couchbase Server
• Store OperaQons – Add: Store the document if it does not yet exist – Set: Store the document, overwriQng exisQng if necessary
• Retrieve OperaQons – Get: Fetch the document – Get and touch: Fetch the document and update the TTL – MulQget: Fetch mulQple documents at the same Qme
• Update operaQons – 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
Note: Not all Client Libraries are created equal
![Page 11: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/11.jpg)
11
A Distributed Hash Table
ApplicaQon
set(key, value) get(key) returns value
DData
Cluster
Database
![Page 12: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/12.jpg)
12
A Distributed Hash Table Document Store
ApplicaQon
set(key, json) get(key) returns json
DData
Cluster
Database
{ !“id": ”brewery_Legacy”,!“type” : “brewery”,!"name" : "Legacy Brewing”,!“address": "525 Canal Street Reading", "updated": "2010-07-22 20:00:20", }!
![Page 13: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/13.jpg)
13
Distributed System Design: Concurrency Controls
• Compare and Swap OperaQons – Olen referred to as “CAS” – OpQmisQc concurrency control – Available with many mutaQon
operaQons, depending on client.
• Get with Lock – Olen referred to as “GETL” – PessimisQc concurrency control – Locks have a short TTL – Locks released with CAS
operaQons – Useful when working with object
graphs
13
Actor 1 Actor 2
Couchbase Server
CAS mismatch Success
A
B
F
C D
E
![Page 14: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/14.jpg)
14
Common QuesQons with Metadata
Document Metadata: • TTL • CAS value • Flags
Q: What happens to a document persisted aKer it’s TTL?
A: A regular background job will remove expired documents.
Q: How do I use flags?
A: Frequently used to idenQfy data type or other anributes, such as compression. Behavior varies from client to client.
![Page 15: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/15.jpg)
15
INTRODUCING DOCUMENTS
![Page 16: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/16.jpg)
16
A JSON Document
16
{! “id": "beer_Hoptimus_Prime",! “type”: “beer”,! "abv": 10.0,! "brewery": "Legacy Brewing Co.",! "category": "North American Ale",! "name": "Hoptimus Prime",! "style": "Imperial or Double India Pale Ale",!}!
The primary key
A float
The type information
![Page 17: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/17.jpg)
17
Other Documents and Document RelaQonships
{ ! “id": "beer_Hoptimus_Prime",! “type” : “beer”, ! "abv": 10.0,! "brewery": ”brewery_Legacy_Brewing_Co",! "category": "North American Ale",! "name": "Hoptimus Prime",! "style": “Double India Pale Ale”!}!
{ ! “id": ”brewery_Legacy_Brewing_Co”,! “type” : “brewery”,! "name" : "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!}!
Afterthought
![Page 18: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/18.jpg)
18
Simplicity of Document Oriented Datastore
• Schema is opQonal – Technically, each document has an implicit schema – Extend the schema at any Qme!
• 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
![Page 19: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/19.jpg)
19
Adding a Document: ObservaQons and ConsideraQons
• ObservaQons – Conversion to document was very simple, many JSON opQons – Flexible schema: Did not need to add the laQtude and longitude to
every record – Flexible schema: Can add the brewery detail later
• ConsideraQons – Use a “type” field for high level filtering on object types
– Why use a parQcular key/_id : ”beer_My_Brew”!– Should I have a TTL?
![Page 20: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/20.jpg)
20
Common QuesQons when AdopQng Couchbase
Q: What if I need to fetch referenced documents? A: Simply get them one aler another or use another View.
Q: How can I update just a small por1on of a document? A: The best approach is to keep the document model live in your applicaQon, then use CAS operaQons to store modified documents. The Ruby sample applicaQon has a good example.
Q: I currently use serialized objects with memcached or Membase, can I do this s1ll with Couchbase Server? A: Absolutely! Everything previously supported and used is sQll there. JSON offers advantages with heterogenenous plasorm support and preparing for Couchbase 2.0 views.
![Page 21: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/21.jpg)
21
COUCHBASE SERVER 2.0 COMPATIBLE LIBRARY FEATURES
![Page 22: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/22.jpg)
22
Couchbase Server 2.0: Views
• Views can cover a few different use cases – Simple secondary indexes (the most common) – AggregaQon funcQons
• Example: count the number of North American Ales
– Organizing related data
![Page 23: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/23.jpg)
23
Indexing and Querying
APP SERVER 1
COUCHBASE CLIENT LIBRARY
§ Indexing work is distributed amongst nodes § Large data set possible § Parallelize the effort
§ Each node has index for data stored on it
§ Queries combine the results from required nodes
CLUSTER MAP
Doc 4
Doc 2
Doc 5
SERVER 1
Doc 6
Doc 4
SERVER 2
Doc 7
Doc 1
SERVER 3
Doc 3
APP SERVER 2
COUCHBASE CLIENT LIBRARY CLUSTER MAP
Doc 9
Doc 7
Doc 8 Doc 6
Doc 3
DOC
DOC
DOC
DOC
DOC
DOC
DOC
DOC
DOC
DOC
DOC
DOC
DOC
DOC
DOC
Doc 9
Doc 5
DOC
DOC
DOC
Doc 1
Doc 8 Doc 2
Replica Docs Replica Docs Replica Docs
AcQve Docs AcQve Docs AcQve Docs
COUCHBASE CLIENT LIBRARY
COUCHBASE CLIENT LIBRARY CLUSTER MAP
CLUSTER MAP
APP SERVER 1 APP SERVER 2
Query Response
![Page 24: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/24.jpg)
24
RESOURCES AND SUMMARY
![Page 25: CouchConf London Developing with Couchbase I: Getting Started](https://reader030.fdocuments.us/reader030/viewer/2022032419/55a3ea1c1a28abc5378b458c/html5/thumbnails/25.jpg)
25
• Couchbase Server Downloads – hnp://www.couchbase.com/downloads-‐all – hnp://www.couchbase.com/couchbase-‐server/overview
• Developing with Client libraries – hnp://www.couchbase.com/develop/java/current (example)
• Couchbase forums – hnp://www.couchbase.com/forums/
Resources, Summary and Call For AcQon