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

Preview:

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).

Citation preview

Astyanax  

Puneet  Oberai  Ne1lix,  Inc.  

h8ps://github.com/Ne1lix/astyanax    

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  

Fluent  query  syntax  

ColumnList<Integer>    =      keyspace  

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

Recipes  

•  All  Rows  Reader  

•  Distributed  Row  Lock  

•  Queue  

•  Chunked  Object  Store  

How  does  Ne1lix  use  it  

Java  Driver  release  in  2013  

•  Async  interface!  

•  Cursor  support  

•  Batching  for  mutaDons  

•  Prepared  statements  

•  Flexible  retry  policies  

•  And  everything  else  in  CQL  ..  

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

   

Calm  down,  thrie  is  sDll  supported    J  

Astyanax  can  use  both  drivers  

Now  the  good  stuff!  What  about  performance?    

           If  you  use  prepared  statements,  you’re  good!  

Reads        (about  2%)  

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

Prepared  Statements  are  a  must  

Prepared  Statements  

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

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 <=?;

Columns  v/s  Rows  

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

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

Rows  are  now  transposed  

Astyanax  value  add  

•  Astyanax  maintains  backwards  compaDbility  with  the  api  

•  Hence  rows  are  sDll  rows  and  columns  are  sDll  columns  

So  what  should  I  use?    

•  Astyanax  has  recipes  •  Astyanax  is  good  for  structured  queries  

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

QuesDons?  

Recommended