cassandra day sv 2014: netflix’s astyanax java client driver for apache cassandra
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
![Page 1: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/1.jpg)
Astyanax
Puneet Oberai Ne1lix, Inc.
![Page 2: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/2.jpg)
h8ps://github.com/Ne1lix/astyanax
![Page 3: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/6.jpg)
How does Ne1lix use it
![Page 7: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/9.jpg)
Astyanax can use both drivers
![Page 10: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/11.jpg)
Reads (about 2%)
![Page 12: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/12.jpg)
Writes (a bit more 5%-‐10%)
![Page 13: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/13.jpg)
Prepared Statements are a must
![Page 14: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/18.jpg)
Rows are now transposed
![Page 19: Cassandra Day SV 2014: Netflix’s Astyanax Java Client Driver for Apache Cassandra](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.site/reader033/viewer/2022051210/54b701154a795930278b4729/html5/thumbnails/21.jpg)
QuesDons?