couchconf london developing with couchbase i: getting started

26
1 Developing with Couchbase Part I: Ge:ng Started Raghavan “Rags” Srinivas Developer Advocate [email protected]

Upload: couchbase

Post on 13-Jul-2015

535 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: CouchConf London Developing with Couchbase I: Getting Started

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

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

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

4  

GETTING  STARTED:  DEVELOPMENT  ENVIRONMENT  

Page 5: CouchConf London Developing with Couchbase I: Getting Started

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

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

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

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

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

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

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

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

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

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

15  

INTRODUCING  DOCUMENTS  

Page 16: CouchConf London Developing with Couchbase I: Getting Started

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

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

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

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

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

21  

COUCHBASE  SERVER  2.0    COMPATIBLE  LIBRARY  FEATURES  

Page 22: CouchConf London Developing with Couchbase I: Getting Started

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

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

24  

RESOURCES  AND  SUMMARY  

Page 25: CouchConf London Developing with Couchbase I: Getting Started

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  

Page 26: CouchConf London Developing with Couchbase I: Getting Started

26  

THANKS  -­‐  Q&A  

26  

Raghavan “Rags” Srinivas, Couchbase Inc.  ([email protected], @ragss)