SlideShare a Scribd company logo
1 of 40
Before we get into the heavy
stuff, Let's imagine hacking
 around with C* for a bit...
You run a large video website
●   CREATE TABLE videos (
    videoid uuid,
    videoname varchar,
    username varchar,
    description varchar, tags varchar,
    upload_date timestamp,
    PRIMARY KEY (videoid,videoname) );
●   INSERT INTO videos (videoid, videoname, username,
    description, tags, upload_date) VALUES ('99051fe9-6a9c-
    46c2-b949-38ef78858dd0','My funny cat','ctodd', 'My cat
    likes to play the piano! So funny.','cats,piano,lol','2012-06-01
    08:00:00');
You have a bajillion users
●   CREATE TABLE users (
    username varchar,
    firstname varchar,
    lastname varchar,
    email varchar,
    password varchar,
    created_date timestamp,
    PRIMARY KEY (username));
●   INSERT INTO users (username, firstname, lastname, email,
    password, created_date) VALUES ('tcodd','Ted','Codd',
    'tcodd@relational.com','5f4dcc3b5aa765d61d8327deb882cf99'
    ,'2011-06-01 08:00:00');
You can query up a storm
●   SELECT firstname,lastname FROM users WHERE username='tcodd';
    firstname | lastname
    -----------+----------
          Ted |      Codd


●   SELECT * FROM videos WHERE videoid = 'b3a76c6b-7c7f-4af6-964f-
    803a9283c401' and videoname>'N';
    videoid                     | videoname         | description
                     | tags   | upload_date        | username
    b3a76c6b-7c7f-4af6-964f-803a9283c401 | Now my dog plays piano! | My
    dog learned to play the piano because of the cat. | dogs,piano,lol | 2012-
    08-30 16:50:00+0000 | ctodd
That's great! Then you ask
         yourself...
●   Can I slice a slice (or sub query)?
●   Can I do advanced where clauses ?
●   Can I union two slices server side?
●   Can I join data from two tables without two
    request/response round trips?
●   What about procedures?
●   Can I write functions or aggregation functions?
Let's look at the API's we have




 http://www.slideshare.net/aaronmorton/apachecon-nafeb2013
But none of those API's do what I
   want, and it seems simple
        enough to do...
Intravert joins the “party”
     at the API Layer
Why not just do it client side?
●   Move processing close to data
    –   Idea borrowed from Hadoop
●   Doing work close to the source can result in:
    –   Less network IO
    –   Less memory spend encoding/decoding 'throw
        away' data
    –   New storage and access paradigms
Vertx + cassandra
●   What is vertx ?
    –   Distributed Event Bus which spans the server and
        even penetrates into client side for effortless 'real-
        time' web applications
●   What are the cool features?
    –   Asynchronous
    –   Hot re-loadable modules
    –   Modules can be written in groovy, ruby, java, java-
        script

                           http://vertx.io
Transport, payload, and
      batching
HTTP Transport
●   HTTP is easy to use on firewall'ed networks
●   Easy to secure
●   Easy to compress
●   The defacto way to do everything anyway
●   IntraVert attempts to limit round-trips
    –   Not provide a terse binary format
JSON Payload
●   Simple nested types like list, map, String
●   Request is composed of N operations
●   Each operation has a configurable timeout
●   Again, IntraVert attempts to limit round-trips
    –   Not provide a terse message format
Why not use lighting fast transport
      and serialization library X?
●   X's language/code gen issues
●   You probably can not TCP dump X
●   Net-admins don't like 90 jars for health checks
●   IntraVert attempts to limit round-trips:
    –   Prepared statements
    –   Server side filtering
    –   Other cool stuff
Sample request and response
{"e": [ {                               {
     "type": "SETKEYSPACE",
                                            "exception":null,
     "op": { "keyspace": "myks" }
                                            "exceptionId":null,
  }, {
     "type": "SETCOLUMNFAMILY",             "opsRes": {
     "op": { "columnfamily": "mycf" }          "0":"OK",
  }, {                                         "1":"OK",
     "type": "SLICE",
                                               "2":[{
     "op": {
                                                    "name":"Founders",
         "rowkey": "beers",
         "start": "Allagash",                       "value":"Breakfast Stout"
         "end": "Sierra Nevada",               }]
         "size": 9                      }}
} }]}
Server side filter
Imagine your data looks like...
{ "rowkey": "beers", "name":
"Allagash", "value": "Allagash Tripel" }
{ "rowkey": "beers", "name":
"Founders", "value": "Breakfast Stout" }
{ "rowkey": "beers", "name": "Dogfish
Head",
"value": "Hellhound IPA" }
Application requirement
●   User request wishes to know which beers are
    “Breakfast Stout” (s)
●   Common “solutions”:
    –   Write a copy of the data sorted by type
    –   Request all the data and parse on client side
Using an IntraVert filter
●   Send a function to the server
●   Function is applied to subsequent get or slice
    operations
●   Only results of the filter are returned to the
    client
Defining a filter JavaScript
●   Syntax to create a filter
      {
           "type": "CREATEFILTER",
           "op": {
               "name": "stouts",
               "spec": "javascript",
            "value": "function(row) { if (row['value'] == 'Breakfast Stout')
    return row; else return null; }"
           }
      },
Defining a filter Groovy/Java

●   We can define a groovy closure or Java filter
    {
        "type": "CREATEFILTER",
        "op": {
         "name": "stouts",
         "spec": "groovy",
       "{ row -> if (row["value"] == "Breakfast Stout") return row else
    return null }"
            }
    },
Filter flow
Common filter use cases
●   Transform data
●   Prune columns/rows like a where clause
●   Extract data from complex fields (json, xml,
    protobuf, etc)
Some light relief
Server Side Multi-Processor
It's the cure for your “redis envy”
Imagine your data looks like...
●   { “row key”:”1”,    ●   { “row key”:”4”,
    name:”a” ,val...}       name:”a” ,val...}
●   { “row key”:”1”,    ●   { “row key”:”4”,
    name:”b” ,val...}       name:”z” ,val...}
Application Requirements
●   User wishes to intersect the column names of
    two slices/queries
●   Common “solutions”
    –   Pull all results to client and apply the intersection
        there
Server Side MultiProcessor
●   Send a class that implements MultiProcessor
    interface to server
●   public List<Map> multiProcess
    (Map<Integer,Object> input, Map params);
●   Do one or more get/slice operations as input
●   Invoke MultiProcessor on input
Multi-processor flow
Multi-processor use cases
●   Union N slices
●   Intersection N slices
●   Some “Join” scenarios
Fat client becomes
  the 'Phat client'
Imagine you want to insert this data
●   User wishes to enter this event for multiple column
    families
    –   09/10/201111:12:13
    –   App=Yahoo
    –   Platform=iOS
    –   OS=4.3.4
    –   Device=iPad2,1
    –   Resolution=768x1024
    –   Events–videoPlayPercent=38–Taste=great

         http://www.slideshare.net/charmalloc/jsteincassandranyc2011
Inserting the data
aggregateColumnNames(”AppPlatformOSVersionDeviceResolution") = "app+platform+osversion+device+resolution#”


def ccAppPlatformOSVersionDeviceResolution(c: (String) => Unit) = {
    c(aggregateColumnNames(”AppPlatformOSVersionDeviceResolution”) + app + p(platform) + p(osversion) + p(device) + p(resolution))
}


aggregateKeys(KEYSPACE  ”ByMonth") = month //201109
aggregateKeys(KEYSPACE  "ByDay") = day //20110910
aggregateKeys(KEYSPACE  ”ByHour") = hour //2011091012
aggregateKeys(KEYSPACE  ”ByMinute") = minute //201109101213


def r(columnName: String): Unit = {
    aggregateKeys.foreach{tuple:(ColumnFamily, String) => {
    val (columnFamily,row) = tuple
    if (row !=null && row.size > 0)
    rows add (columnFamily -> row has columnName inc) //increment the counter
    }
    }
}
ccAppPlatformOSVersionDeviceResolution(r)




                        http://www.slideshare.net/charmalloc/jsteincassandranyc2011
Solution
    ●   Send the data once and compute the N
        permutations on the server side
public void process(JsonObject request, JsonObject state, JsonObject response, EventBus eb) {
    JsonObject params = request.getObject("mpparams");
    String uid = (String) params.getString("userid");
    String fname = (String) params.getString("fname");
    String lname = (String) params.getString("lname");
    String city = (String) params.getString("city");

    RowMutation rm = new RowMutation("myks", IntraService.byteBufferForObject(uid));
    QueryPath qp = new QueryPath("users", null, IntraService.byteBufferForObject("fname"));
    rm.add(qp, IntraService.byteBufferForObject(fname), System.nanoTime());
    QueryPath qp2 = new QueryPath("users", null, IntraService.byteBufferForObject("lname"));
    rm.add(qp2, IntraService.byteBufferForObject(lname), System.nanoTime());
    ...
      try {
      StorageProxy.mutate(mutations, ConsistencyLevel.ONE);
    } catch (WriteTimeoutException | UnavailableException | OverloadedException e) {
       e.printStackTrace();
       response.putString("status", "FAILED");
    }
    response.putString("status", "OK");
}
Service Processor Flow
IntraVert status
●   Still pre 1.0
●   Good docs
    –   https://github.com/zznate/intravert-ug/wiki/_pages
●   Functional equivalent to thrift (mostly features
    ported)
●   CQL support
●   Virgil (coming soon)
●   Hbase like scanners (coming soon)
Hack at it




https://github.com/zznate/intravert-ug
Questions?

More Related Content

What's hot

Testing Backbone applications with Jasmine
Testing Backbone applications with JasmineTesting Backbone applications with Jasmine
Testing Backbone applications with JasmineLeon van der Grient
 
Building Your First Data Science Applicatino in MongoDB
Building Your First Data Science Applicatino in MongoDBBuilding Your First Data Science Applicatino in MongoDB
Building Your First Data Science Applicatino in MongoDBMongoDB
 
JJUG CCC 2011 Spring
JJUG CCC 2011 SpringJJUG CCC 2011 Spring
JJUG CCC 2011 SpringKiyotaka Oku
 
Why Every Tester Should Learn Ruby
Why Every Tester Should Learn RubyWhy Every Tester Should Learn Ruby
Why Every Tester Should Learn RubyRaimonds Simanovskis
 
Compose Async with RxJS
Compose Async with RxJSCompose Async with RxJS
Compose Async with RxJSKyung Yeol Kim
 
{{more}} Kibana4
{{more}} Kibana4{{more}} Kibana4
{{more}} Kibana4琛琳 饶
 
MongoDB World 2016: Deciphering .explain() Output
MongoDB World 2016: Deciphering .explain() OutputMongoDB World 2016: Deciphering .explain() Output
MongoDB World 2016: Deciphering .explain() OutputMongoDB
 
Zabbix LLD from a C Module by Jan-Piet Mens
Zabbix LLD from a C Module by Jan-Piet MensZabbix LLD from a C Module by Jan-Piet Mens
Zabbix LLD from a C Module by Jan-Piet MensNETWAYS
 
Solr & Lucene @ Etsy by Gregg Donovan
Solr & Lucene @ Etsy by Gregg DonovanSolr & Lucene @ Etsy by Gregg Donovan
Solr & Lucene @ Etsy by Gregg DonovanGregg Donovan
 
It's 10pm: Do You Know Where Your Writes Are?
It's 10pm: Do You Know Where Your Writes Are?It's 10pm: Do You Know Where Your Writes Are?
It's 10pm: Do You Know Where Your Writes Are?MongoDB
 
Object Oriented Exploitation: New techniques in Windows mitigation bypass
Object Oriented Exploitation: New techniques in Windows mitigation bypassObject Oriented Exploitation: New techniques in Windows mitigation bypass
Object Oriented Exploitation: New techniques in Windows mitigation bypassSam Thomas
 
RestMQ - HTTP/Redis based Message Queue
RestMQ - HTTP/Redis based Message QueueRestMQ - HTTP/Redis based Message Queue
RestMQ - HTTP/Redis based Message QueueGleicon Moraes
 
Writing native bindings to node.js in C++
Writing native bindings to node.js in C++Writing native bindings to node.js in C++
Writing native bindings to node.js in C++nsm.nikhil
 
Caching and tuning fun for high scalability @ LOAD2012
Caching and tuning fun for high scalability @ LOAD2012Caching and tuning fun for high scalability @ LOAD2012
Caching and tuning fun for high scalability @ LOAD2012Wim Godden
 
Using ngx_lua in UPYUN
Using ngx_lua in UPYUNUsing ngx_lua in UPYUN
Using ngx_lua in UPYUNCong Zhang
 
Beyond php it's not (just) about the code
Beyond php   it's not (just) about the codeBeyond php   it's not (just) about the code
Beyond php it's not (just) about the codeWim Godden
 
Annotation processing and code gen
Annotation processing and code genAnnotation processing and code gen
Annotation processing and code genkoji lin
 
Compare mysql5.1.50 mysql5.5.8
Compare mysql5.1.50 mysql5.5.8Compare mysql5.1.50 mysql5.5.8
Compare mysql5.1.50 mysql5.5.8Philip Zhong
 
Letswift19-clean-architecture
Letswift19-clean-architectureLetswift19-clean-architecture
Letswift19-clean-architectureJung Kim
 

What's hot (20)

Testing Backbone applications with Jasmine
Testing Backbone applications with JasmineTesting Backbone applications with Jasmine
Testing Backbone applications with Jasmine
 
Building Your First Data Science Applicatino in MongoDB
Building Your First Data Science Applicatino in MongoDBBuilding Your First Data Science Applicatino in MongoDB
Building Your First Data Science Applicatino in MongoDB
 
JJUG CCC 2011 Spring
JJUG CCC 2011 SpringJJUG CCC 2011 Spring
JJUG CCC 2011 Spring
 
Why Every Tester Should Learn Ruby
Why Every Tester Should Learn RubyWhy Every Tester Should Learn Ruby
Why Every Tester Should Learn Ruby
 
Compose Async with RxJS
Compose Async with RxJSCompose Async with RxJS
Compose Async with RxJS
 
{{more}} Kibana4
{{more}} Kibana4{{more}} Kibana4
{{more}} Kibana4
 
MongoDB World 2016: Deciphering .explain() Output
MongoDB World 2016: Deciphering .explain() OutputMongoDB World 2016: Deciphering .explain() Output
MongoDB World 2016: Deciphering .explain() Output
 
Zabbix LLD from a C Module by Jan-Piet Mens
Zabbix LLD from a C Module by Jan-Piet MensZabbix LLD from a C Module by Jan-Piet Mens
Zabbix LLD from a C Module by Jan-Piet Mens
 
Solr & Lucene @ Etsy by Gregg Donovan
Solr & Lucene @ Etsy by Gregg DonovanSolr & Lucene @ Etsy by Gregg Donovan
Solr & Lucene @ Etsy by Gregg Donovan
 
It's 10pm: Do You Know Where Your Writes Are?
It's 10pm: Do You Know Where Your Writes Are?It's 10pm: Do You Know Where Your Writes Are?
It's 10pm: Do You Know Where Your Writes Are?
 
Object Oriented Exploitation: New techniques in Windows mitigation bypass
Object Oriented Exploitation: New techniques in Windows mitigation bypassObject Oriented Exploitation: New techniques in Windows mitigation bypass
Object Oriented Exploitation: New techniques in Windows mitigation bypass
 
RestMQ - HTTP/Redis based Message Queue
RestMQ - HTTP/Redis based Message QueueRestMQ - HTTP/Redis based Message Queue
RestMQ - HTTP/Redis based Message Queue
 
Writing native bindings to node.js in C++
Writing native bindings to node.js in C++Writing native bindings to node.js in C++
Writing native bindings to node.js in C++
 
Caching and tuning fun for high scalability @ LOAD2012
Caching and tuning fun for high scalability @ LOAD2012Caching and tuning fun for high scalability @ LOAD2012
Caching and tuning fun for high scalability @ LOAD2012
 
Using ngx_lua in UPYUN
Using ngx_lua in UPYUNUsing ngx_lua in UPYUN
Using ngx_lua in UPYUN
 
Beyond php it's not (just) about the code
Beyond php   it's not (just) about the codeBeyond php   it's not (just) about the code
Beyond php it's not (just) about the code
 
Annotation processing and code gen
Annotation processing and code genAnnotation processing and code gen
Annotation processing and code gen
 
Nancy + rest mow2012
Nancy + rest   mow2012Nancy + rest   mow2012
Nancy + rest mow2012
 
Compare mysql5.1.50 mysql5.5.8
Compare mysql5.1.50 mysql5.5.8Compare mysql5.1.50 mysql5.5.8
Compare mysql5.1.50 mysql5.5.8
 
Letswift19-clean-architecture
Letswift19-clean-architectureLetswift19-clean-architecture
Letswift19-clean-architecture
 

Viewers also liked

Как стать партнером проекта «Претендент»?
Как стать партнером проекта «Претендент»?Как стать партнером проекта «Претендент»?
Как стать партнером проекта «Претендент»?PretendentSupport
 
Goodwins theory (Palance)
Goodwins theory (Palance)Goodwins theory (Palance)
Goodwins theory (Palance)JCMander
 
Iconic stills
Iconic stillsIconic stills
Iconic stillsOHeilatan
 
Pastoe
PastoePastoe
Pastoepastoe
 
Project m
Project mProject m
Project mAlex Wu
 
E book ondernemen-met-sociale-netwerken
E book ondernemen-met-sociale-netwerkenE book ondernemen-met-sociale-netwerken
E book ondernemen-met-sociale-netwerkenQuietroom Label
 
Cfu3721 definitions of_concepts_2013__2 (1)
Cfu3721 definitions of_concepts_2013__2 (1)Cfu3721 definitions of_concepts_2013__2 (1)
Cfu3721 definitions of_concepts_2013__2 (1)Koskim Petrus
 
Aceleracion de aplicacione 2
Aceleracion de aplicacione 2Aceleracion de aplicacione 2
Aceleracion de aplicacione 2jfth
 
一個民宿老闆教我的事
一個民宿老闆教我的事一個民宿老闆教我的事
一個民宿老闆教我的事Fa Zhou Shi
 
Introduction to Density
Introduction to DensityIntroduction to Density
Introduction to Densityjmori1
 
Calendario 2011
Calendario 2011Calendario 2011
Calendario 2011castelbi
 
Mal ppt 2013
Mal ppt 2013Mal ppt 2013
Mal ppt 2013shineasso
 
Truemaisha trainings catalog
Truemaisha trainings catalogTruemaisha trainings catalog
Truemaisha trainings catalogEric Chrispin
 
20087067 choi mun jung presentation
20087067 choi mun jung presentation20087067 choi mun jung presentation
20087067 choi mun jung presentation문정 최
 

Viewers also liked (20)

Cv
CvCv
Cv
 
Как стать партнером проекта «Претендент»?
Как стать партнером проекта «Претендент»?Как стать партнером проекта «Претендент»?
Как стать партнером проекта «Претендент»?
 
Goodwins theory (Palance)
Goodwins theory (Palance)Goodwins theory (Palance)
Goodwins theory (Palance)
 
Homework be going to
Homework be going toHomework be going to
Homework be going to
 
Iconic stills
Iconic stillsIconic stills
Iconic stills
 
Pastoe
PastoePastoe
Pastoe
 
Project m
Project mProject m
Project m
 
Real ch.2 a
Real ch.2 aReal ch.2 a
Real ch.2 a
 
الزكاة
الزكاةالزكاة
الزكاة
 
Essential list 1
Essential list 1Essential list 1
Essential list 1
 
E book ondernemen-met-sociale-netwerken
E book ondernemen-met-sociale-netwerkenE book ondernemen-met-sociale-netwerken
E book ondernemen-met-sociale-netwerken
 
Cfu3721 definitions of_concepts_2013__2 (1)
Cfu3721 definitions of_concepts_2013__2 (1)Cfu3721 definitions of_concepts_2013__2 (1)
Cfu3721 definitions of_concepts_2013__2 (1)
 
Aceleracion de aplicacione 2
Aceleracion de aplicacione 2Aceleracion de aplicacione 2
Aceleracion de aplicacione 2
 
一個民宿老闆教我的事
一個民宿老闆教我的事一個民宿老闆教我的事
一個民宿老闆教我的事
 
Introduction to Density
Introduction to DensityIntroduction to Density
Introduction to Density
 
Calendario 2011
Calendario 2011Calendario 2011
Calendario 2011
 
Mal ppt 2013
Mal ppt 2013Mal ppt 2013
Mal ppt 2013
 
25martiou2013
25martiou201325martiou2013
25martiou2013
 
Truemaisha trainings catalog
Truemaisha trainings catalogTruemaisha trainings catalog
Truemaisha trainings catalog
 
20087067 choi mun jung presentation
20087067 choi mun jung presentation20087067 choi mun jung presentation
20087067 choi mun jung presentation
 

Similar to Intravert Server side processing for Cassandra

Event-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 EngineEvent-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 EngineRicardo Silva
 
Skydive, real-time network analyzer, container integration
Skydive, real-time network analyzer, container integrationSkydive, real-time network analyzer, container integration
Skydive, real-time network analyzer, container integrationSylvain Afchain
 
Node.js - async for the rest of us.
Node.js - async for the rest of us.Node.js - async for the rest of us.
Node.js - async for the rest of us.Mike Brevoort
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch
 
Original slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talkOriginal slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talkAarti Parikh
 
Monitoring Your ISP Using InfluxDB Cloud and Raspberry Pi
Monitoring Your ISP Using InfluxDB Cloud and Raspberry PiMonitoring Your ISP Using InfluxDB Cloud and Raspberry Pi
Monitoring Your ISP Using InfluxDB Cloud and Raspberry PiInfluxData
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applicationsTom Croucher
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomyDongmin Yu
 
[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기NAVER D2
 
Running Vue Storefront in production (PWA Magento webshop)
Running Vue Storefront in production (PWA Magento webshop)Running Vue Storefront in production (PWA Magento webshop)
Running Vue Storefront in production (PWA Magento webshop)Vendic Magento, PWA & Marketing
 
A la découverte de TypeScript
A la découverte de TypeScriptA la découverte de TypeScript
A la découverte de TypeScriptDenis Voituron
 
Future Decoded - Node.js per sviluppatori .NET
Future Decoded - Node.js per sviluppatori .NETFuture Decoded - Node.js per sviluppatori .NET
Future Decoded - Node.js per sviluppatori .NETGianluca Carucci
 
Introduction to WSO2 Data Analytics Platform
Introduction to  WSO2 Data Analytics PlatformIntroduction to  WSO2 Data Analytics Platform
Introduction to WSO2 Data Analytics PlatformSrinath Perera
 
Nodejs and WebSockets
Nodejs and WebSocketsNodejs and WebSockets
Nodejs and WebSocketsGonzalo Ayuso
 
Building and Scaling Node.js Applications
Building and Scaling Node.js ApplicationsBuilding and Scaling Node.js Applications
Building and Scaling Node.js ApplicationsOhad Kravchick
 

Similar to Intravert Server side processing for Cassandra (20)

Event-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 EngineEvent-driven IO server-side JavaScript environment based on V8 Engine
Event-driven IO server-side JavaScript environment based on V8 Engine
 
Skydive, real-time network analyzer, container integration
Skydive, real-time network analyzer, container integrationSkydive, real-time network analyzer, container integration
Skydive, real-time network analyzer, container integration
 
Node.js - async for the rest of us.
Node.js - async for the rest of us.Node.js - async for the rest of us.
Node.js - async for the rest of us.
 
soft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.jssoft-shake.ch - Hands on Node.js
soft-shake.ch - Hands on Node.js
 
Original slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talkOriginal slides from Ryan Dahl's NodeJs intro talk
Original slides from Ryan Dahl's NodeJs intro talk
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
Monitoring Your ISP Using InfluxDB Cloud and Raspberry Pi
Monitoring Your ISP Using InfluxDB Cloud and Raspberry PiMonitoring Your ISP Using InfluxDB Cloud and Raspberry Pi
Monitoring Your ISP Using InfluxDB Cloud and Raspberry Pi
 
Writing robust Node.js applications
Writing robust Node.js applicationsWriting robust Node.js applications
Writing robust Node.js applications
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomy
 
Skydive 5/07/2016
Skydive 5/07/2016Skydive 5/07/2016
Skydive 5/07/2016
 
[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기[245] presto 내부구조 파헤치기
[245] presto 내부구조 파헤치기
 
Running Vue Storefront in production (PWA Magento webshop)
Running Vue Storefront in production (PWA Magento webshop)Running Vue Storefront in production (PWA Magento webshop)
Running Vue Storefront in production (PWA Magento webshop)
 
A la découverte de TypeScript
A la découverte de TypeScriptA la découverte de TypeScript
A la découverte de TypeScript
 
NodeJS
NodeJSNodeJS
NodeJS
 
Future Decoded - Node.js per sviluppatori .NET
Future Decoded - Node.js per sviluppatori .NETFuture Decoded - Node.js per sviluppatori .NET
Future Decoded - Node.js per sviluppatori .NET
 
Introduction to WSO2 Data Analytics Platform
Introduction to  WSO2 Data Analytics PlatformIntroduction to  WSO2 Data Analytics Platform
Introduction to WSO2 Data Analytics Platform
 
Nodejs and WebSockets
Nodejs and WebSocketsNodejs and WebSockets
Nodejs and WebSockets
 
Building and Scaling Node.js Applications
Building and Scaling Node.js ApplicationsBuilding and Scaling Node.js Applications
Building and Scaling Node.js Applications
 
Node azure
Node azureNode azure
Node azure
 
Pyrax talk
Pyrax talkPyrax talk
Pyrax talk
 

More from Edward Capriolo

Nibiru: Building your own NoSQL store
Nibiru: Building your own NoSQL storeNibiru: Building your own NoSQL store
Nibiru: Building your own NoSQL storeEdward Capriolo
 
Web-scale data processing: practical approaches for low-latency and batch
Web-scale data processing: practical approaches for low-latency and batchWeb-scale data processing: practical approaches for low-latency and batch
Web-scale data processing: practical approaches for low-latency and batchEdward Capriolo
 
Cassandra NoSQL Lan party
Cassandra NoSQL Lan partyCassandra NoSQL Lan party
Cassandra NoSQL Lan partyEdward Capriolo
 
M6d cassandrapresentation
M6d cassandrapresentationM6d cassandrapresentation
M6d cassandrapresentationEdward Capriolo
 
Breaking first-normal form with Hive
Breaking first-normal form with HiveBreaking first-normal form with Hive
Breaking first-normal form with HiveEdward Capriolo
 
Hadoop Monitoring best Practices
Hadoop Monitoring best PracticesHadoop Monitoring best Practices
Hadoop Monitoring best PracticesEdward Capriolo
 
Whirlwind tour of Hadoop and HIve
Whirlwind tour of Hadoop and HIveWhirlwind tour of Hadoop and HIve
Whirlwind tour of Hadoop and HIveEdward Capriolo
 
Counters for real-time statistics
Counters for real-time statisticsCounters for real-time statistics
Counters for real-time statisticsEdward Capriolo
 

More from Edward Capriolo (16)

Nibiru: Building your own NoSQL store
Nibiru: Building your own NoSQL storeNibiru: Building your own NoSQL store
Nibiru: Building your own NoSQL store
 
Web-scale data processing: practical approaches for low-latency and batch
Web-scale data processing: practical approaches for low-latency and batchWeb-scale data processing: practical approaches for low-latency and batch
Web-scale data processing: practical approaches for low-latency and batch
 
Big data nyu
Big data nyuBig data nyu
Big data nyu
 
Cassandra4hadoop
Cassandra4hadoopCassandra4hadoop
Cassandra4hadoop
 
M6d cassandra summit
M6d cassandra summitM6d cassandra summit
M6d cassandra summit
 
Apache Kafka Demo
Apache Kafka DemoApache Kafka Demo
Apache Kafka Demo
 
Cassandra NoSQL Lan party
Cassandra NoSQL Lan partyCassandra NoSQL Lan party
Cassandra NoSQL Lan party
 
M6d cassandrapresentation
M6d cassandrapresentationM6d cassandrapresentation
M6d cassandrapresentation
 
Breaking first-normal form with Hive
Breaking first-normal form with HiveBreaking first-normal form with Hive
Breaking first-normal form with Hive
 
Casbase presentation
Casbase presentationCasbase presentation
Casbase presentation
 
Hadoop Monitoring best Practices
Hadoop Monitoring best PracticesHadoop Monitoring best Practices
Hadoop Monitoring best Practices
 
Whirlwind tour of Hadoop and HIve
Whirlwind tour of Hadoop and HIveWhirlwind tour of Hadoop and HIve
Whirlwind tour of Hadoop and HIve
 
Cli deep dive
Cli deep diveCli deep dive
Cli deep dive
 
Cassandra as Memcache
Cassandra as MemcacheCassandra as Memcache
Cassandra as Memcache
 
Counters for real-time statistics
Counters for real-time statisticsCounters for real-time statistics
Counters for real-time statistics
 
Real world capacity
Real world capacityReal world capacity
Real world capacity
 

Recently uploaded

The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxBkGupta21
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESmohitsingh558521
 

Recently uploaded (20)

The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
unit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptxunit 4 immunoblotting technique complete.pptx
unit 4 immunoblotting technique complete.pptx
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICESSALESFORCE EDUCATION CLOUD | FEXLE SERVICES
SALESFORCE EDUCATION CLOUD | FEXLE SERVICES
 

Intravert Server side processing for Cassandra

  • 1. Before we get into the heavy stuff, Let's imagine hacking around with C* for a bit...
  • 2. You run a large video website ● CREATE TABLE videos ( videoid uuid, videoname varchar, username varchar, description varchar, tags varchar, upload_date timestamp, PRIMARY KEY (videoid,videoname) ); ● INSERT INTO videos (videoid, videoname, username, description, tags, upload_date) VALUES ('99051fe9-6a9c- 46c2-b949-38ef78858dd0','My funny cat','ctodd', 'My cat likes to play the piano! So funny.','cats,piano,lol','2012-06-01 08:00:00');
  • 3. You have a bajillion users ● CREATE TABLE users ( username varchar, firstname varchar, lastname varchar, email varchar, password varchar, created_date timestamp, PRIMARY KEY (username)); ● INSERT INTO users (username, firstname, lastname, email, password, created_date) VALUES ('tcodd','Ted','Codd', 'tcodd@relational.com','5f4dcc3b5aa765d61d8327deb882cf99' ,'2011-06-01 08:00:00');
  • 4. You can query up a storm ● SELECT firstname,lastname FROM users WHERE username='tcodd'; firstname | lastname -----------+---------- Ted | Codd ● SELECT * FROM videos WHERE videoid = 'b3a76c6b-7c7f-4af6-964f- 803a9283c401' and videoname>'N'; videoid | videoname | description | tags | upload_date | username b3a76c6b-7c7f-4af6-964f-803a9283c401 | Now my dog plays piano! | My dog learned to play the piano because of the cat. | dogs,piano,lol | 2012- 08-30 16:50:00+0000 | ctodd
  • 5. That's great! Then you ask yourself...
  • 6. Can I slice a slice (or sub query)? ● Can I do advanced where clauses ? ● Can I union two slices server side? ● Can I join data from two tables without two request/response round trips? ● What about procedures? ● Can I write functions or aggregation functions?
  • 7. Let's look at the API's we have http://www.slideshare.net/aaronmorton/apachecon-nafeb2013
  • 8. But none of those API's do what I want, and it seems simple enough to do...
  • 9. Intravert joins the “party” at the API Layer
  • 10. Why not just do it client side? ● Move processing close to data – Idea borrowed from Hadoop ● Doing work close to the source can result in: – Less network IO – Less memory spend encoding/decoding 'throw away' data – New storage and access paradigms
  • 11. Vertx + cassandra ● What is vertx ? – Distributed Event Bus which spans the server and even penetrates into client side for effortless 'real- time' web applications ● What are the cool features? – Asynchronous – Hot re-loadable modules – Modules can be written in groovy, ruby, java, java- script http://vertx.io
  • 13. HTTP Transport ● HTTP is easy to use on firewall'ed networks ● Easy to secure ● Easy to compress ● The defacto way to do everything anyway ● IntraVert attempts to limit round-trips – Not provide a terse binary format
  • 14. JSON Payload ● Simple nested types like list, map, String ● Request is composed of N operations ● Each operation has a configurable timeout ● Again, IntraVert attempts to limit round-trips – Not provide a terse message format
  • 15. Why not use lighting fast transport and serialization library X? ● X's language/code gen issues ● You probably can not TCP dump X ● Net-admins don't like 90 jars for health checks ● IntraVert attempts to limit round-trips: – Prepared statements – Server side filtering – Other cool stuff
  • 16. Sample request and response {"e": [ { { "type": "SETKEYSPACE", "exception":null, "op": { "keyspace": "myks" } "exceptionId":null, }, { "type": "SETCOLUMNFAMILY", "opsRes": { "op": { "columnfamily": "mycf" } "0":"OK", }, { "1":"OK", "type": "SLICE", "2":[{ "op": { "name":"Founders", "rowkey": "beers", "start": "Allagash", "value":"Breakfast Stout" "end": "Sierra Nevada", }] "size": 9 }} } }]}
  • 18. Imagine your data looks like... { "rowkey": "beers", "name": "Allagash", "value": "Allagash Tripel" } { "rowkey": "beers", "name": "Founders", "value": "Breakfast Stout" } { "rowkey": "beers", "name": "Dogfish Head", "value": "Hellhound IPA" }
  • 19. Application requirement ● User request wishes to know which beers are “Breakfast Stout” (s) ● Common “solutions”: – Write a copy of the data sorted by type – Request all the data and parse on client side
  • 20. Using an IntraVert filter ● Send a function to the server ● Function is applied to subsequent get or slice operations ● Only results of the filter are returned to the client
  • 21. Defining a filter JavaScript ● Syntax to create a filter { "type": "CREATEFILTER", "op": { "name": "stouts", "spec": "javascript", "value": "function(row) { if (row['value'] == 'Breakfast Stout') return row; else return null; }" } },
  • 22. Defining a filter Groovy/Java ● We can define a groovy closure or Java filter { "type": "CREATEFILTER", "op": { "name": "stouts", "spec": "groovy", "{ row -> if (row["value"] == "Breakfast Stout") return row else return null }" } },
  • 24. Common filter use cases ● Transform data ● Prune columns/rows like a where clause ● Extract data from complex fields (json, xml, protobuf, etc)
  • 27. It's the cure for your “redis envy”
  • 28. Imagine your data looks like... ● { “row key”:”1”, ● { “row key”:”4”, name:”a” ,val...} name:”a” ,val...} ● { “row key”:”1”, ● { “row key”:”4”, name:”b” ,val...} name:”z” ,val...}
  • 29. Application Requirements ● User wishes to intersect the column names of two slices/queries ● Common “solutions” – Pull all results to client and apply the intersection there
  • 30. Server Side MultiProcessor ● Send a class that implements MultiProcessor interface to server ● public List<Map> multiProcess (Map<Integer,Object> input, Map params); ● Do one or more get/slice operations as input ● Invoke MultiProcessor on input
  • 32. Multi-processor use cases ● Union N slices ● Intersection N slices ● Some “Join” scenarios
  • 33. Fat client becomes the 'Phat client'
  • 34. Imagine you want to insert this data ● User wishes to enter this event for multiple column families – 09/10/201111:12:13 – App=Yahoo – Platform=iOS – OS=4.3.4 – Device=iPad2,1 – Resolution=768x1024 – Events–videoPlayPercent=38–Taste=great http://www.slideshare.net/charmalloc/jsteincassandranyc2011
  • 35. Inserting the data aggregateColumnNames(”AppPlatformOSVersionDeviceResolution") = "app+platform+osversion+device+resolution#” def ccAppPlatformOSVersionDeviceResolution(c: (String) => Unit) = { c(aggregateColumnNames(”AppPlatformOSVersionDeviceResolution”) + app + p(platform) + p(osversion) + p(device) + p(resolution)) } aggregateKeys(KEYSPACE ”ByMonth") = month //201109 aggregateKeys(KEYSPACE "ByDay") = day //20110910 aggregateKeys(KEYSPACE ”ByHour") = hour //2011091012 aggregateKeys(KEYSPACE ”ByMinute") = minute //201109101213 def r(columnName: String): Unit = { aggregateKeys.foreach{tuple:(ColumnFamily, String) => { val (columnFamily,row) = tuple if (row !=null && row.size > 0) rows add (columnFamily -> row has columnName inc) //increment the counter } } } ccAppPlatformOSVersionDeviceResolution(r) http://www.slideshare.net/charmalloc/jsteincassandranyc2011
  • 36. Solution ● Send the data once and compute the N permutations on the server side public void process(JsonObject request, JsonObject state, JsonObject response, EventBus eb) { JsonObject params = request.getObject("mpparams"); String uid = (String) params.getString("userid"); String fname = (String) params.getString("fname"); String lname = (String) params.getString("lname"); String city = (String) params.getString("city"); RowMutation rm = new RowMutation("myks", IntraService.byteBufferForObject(uid)); QueryPath qp = new QueryPath("users", null, IntraService.byteBufferForObject("fname")); rm.add(qp, IntraService.byteBufferForObject(fname), System.nanoTime()); QueryPath qp2 = new QueryPath("users", null, IntraService.byteBufferForObject("lname")); rm.add(qp2, IntraService.byteBufferForObject(lname), System.nanoTime()); ... try { StorageProxy.mutate(mutations, ConsistencyLevel.ONE); } catch (WriteTimeoutException | UnavailableException | OverloadedException e) { e.printStackTrace(); response.putString("status", "FAILED"); } response.putString("status", "OK"); }
  • 38. IntraVert status ● Still pre 1.0 ● Good docs – https://github.com/zznate/intravert-ug/wiki/_pages ● Functional equivalent to thrift (mostly features ported) ● CQL support ● Virgil (coming soon) ● Hbase like scanners (coming soon)