Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

21
Astyanax Puneet Oberai Ne1lix, Inc.

description

Astyanax is the thrift protocol based C* driver widely used and open sourced by Netflix. It was recently integrated with the Java Driver released by DataStax. This talk focusses on the different options available with Astyanax and how it complements the Java Driver. About Puneet Oberai, Senior Software Engineer at Netflix Senior Software Engineer at Netflix and proud team member of Netflix CDE (Cloud Data Engineering).

Transcript of Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Page 1: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Astyanax  

Puneet  Oberai  Ne1lix,  Inc.  

Page 2: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

h8ps://github.com/Ne1lix/astyanax    

Page 3: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Useful  features  

–  Load  balancing  

–  ConnecDon  pooling  -­‐  resilient  with  failover  and  retries  

–  Integrates  with  external  host  discovery  

– Metrics  (there  are  a  lot!)  

–  Highly  configurable  and  pluggable  

Page 4: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Fluent  query  syntax  

ColumnList<Integer>    =      keyspace  

                       .readQuery(  “myCF”  )      .getRow(  “A”  )      .withColumnSlice(  new  RangeBuilder()                  .greaterThan(11)                  .lessThanEquals(18)                  .build())      .execute()      .getResult();  

Page 5: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Recipes  

•  All  Rows  Reader  

•  Distributed  Row  Lock  

•  Queue  

•  Chunked  Object  Store  

Page 6: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

How  does  Ne1lix  use  it  

Page 7: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Java  Driver  release  in  2013  

•  Async  interface!  

•  Cursor  support  

•  Batching  for  mutaDons  

•  Prepared  statements  

•  Flexible  retry  policies  

•  And  everything  else  in  CQL  ..  

Page 8: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

But  what  about  thrie    !!??  I’m  sDll  using  it.      

   

Calm  down,  thrie  is  sDll  supported    J  

Page 9: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Astyanax  can  use  both  drivers  

Page 10: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Now  the  good  stuff!  What  about  performance?    

           If  you  use  prepared  statements,  you’re  good!  

Page 11: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Reads        (about  2%)  

Page 12: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Writes  (a  bit  more  5%-­‐10%)  

Page 13: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Prepared  Statements  are  a  must  

Page 14: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Prepared  Statements  

•  There  is  no  magic  here  –  You  “prepare”  –  Then  you  re-­‐use  

Page 15: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Astyanax  value  add    

Structured  queries  naturally  have  some    query  signature  

           keyspace.prepareQuery( myCF ) .withRow( myRowKey )

.withColumnSlice( start, end)

.execute();

Translates  to      select * from ks.myCF where key=? and column1 >=? and column1 <=?;

Page 16: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Columns  v/s  Rows  

•  Are  columns  really  columns?        •  Are  rows  sDll  rows?  •  Are  columns  really  rows?    

Page 17: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Simple  schema    Key  validator  –  int  Col  comparator  –  int  Default  validator  –  u18  

Page 18: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Rows  are  now  transposed  

Page 19: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

Astyanax  value  add  

•  Astyanax  maintains  backwards  compaDbility  with  the  api  

•  Hence  rows  are  sDll  rows  and  columns  are  sDll  columns  

Page 20: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

So  what  should  I  use?    

•  Astyanax  has  recipes  •  Astyanax  is  good  for  structured  queries  

•  If  all  you  want  is  CQL3,  then  use  Java  Driver  

Page 21: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra

QuesDons?