SlideShare a Scribd company logo
reimagining the business of
apps
#Cassandra13	
  	
  
©2013 NativeX Holdings, LLC
The Perils and Triumphs of using
Cassandra at a .NET/Microsoft Shop
#Cassandra13	
  	
  
About the Presenters
Jeff Smoley – Infrastructure Architect
Derek Bromenshenkel – Infrastructure Architect
#Cassandra13	
  	
  
Agenda
•  About NativeX
•  Why Cassandra?
•  Challenges
•  Auto Id Generation
•  FluentCassandra
•  Hector
•  IKVM.NET
•  HectorNet
•  Reporting Integration
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
About NativeX
•  Formerly W3i
•  Home Office in Sartell, MN
•  75 miles NW of Minneapolis
•  Remote Offices in MSP and SF
•  150 Employees
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
What NativeX Does
•  Marketing technology
platform that enables
developers to build
successful business around
their apps.
•  We provide Publishers with
a way to monetize and
Advertisers with a way to
gain distribution.
#Cassandra13	
  	
  
Mobile Vanity Metrics
•  Over 700M unique devices
•  1000s of Apps
•  > 100M Monthly Active Users
•  > 200GB of data ingest per week
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Backstory
•  From 100M session/quarter
to 5B.
•  Anticipate 7B sessions in
Q2.
•  Growth was anticipated.
•  Realized infrastructure
needed to change to support
this. 0	
  
1	
  
2	
  
3	
  
4	
  
5	
  
6	
  
2011	
  Q4	
   2012	
  Q1	
   2012	
  Q2	
   2012	
  Q3	
   2012	
  Q4	
   2013	
  Q1	
  
Billions	
  
API	
  Requests	
  
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Original OLTP Architecture
•  Microsoft SQL Server
•  2 Node Cluster (Failover)
•  12 cores / node
•  192 GB mem / node
•  Compellent SAN
•  172 Tiered Disk
•  SSD, FC, SATA
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Objectives
Scale	
  
• Horizontal	
  
• Incremental	
  cost	
  
structure	
  
Resiliency	
  
• No	
  single	
  point	
  
of	
  failure	
  
• Geographically	
  
distributed	
  
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
What is NoSQL
•  Stands for Not Only SQL.
•  The NoSQL movement is about understanding problems and
focusing on solutions.
•  It’s not about silver bullets and black boxes.
•  It is about using the right tool for the right problem.
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Researched Products
•  Compared features like:
•  Distributed / Shared Nothing
•  Multi-Cluster Support
•  Maturity & Popularity
•  Documentation
•  .NET Support
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Why Cassandra?
•  Multi-node
•  Multi-cluster
•  Highly Available
•  Durable
•  Shared Nothing
•  Tunable Consistency
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Cassandra at NativeX
•  C* was not a replacement DB system.
•  We continue to use MS SQL Server alongside C*.
•  SQL Server used for storing configuration data.
•  C* solves a very specific problem for us.
•  Writing large volumes of data quickly.
•  Reading very specific data out of a large record set.
#Cassandra13	
  	
  
Challenges
•  C* does not have Auto Id generation.
•  How to connect to C* with C#?
•  Finding a connector with good Failure Tolerance.
•  How to integrate our reporting system?
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Auto ID Generation
•  Pre-existing requirements
•  Unique, 64-bit positive integers
•  Increasing (sortable) a plus
•  Previously SQL Server Identity column
•  A Time-based UUID is sortable and unique
•  Changed everything we could
•  The future for us
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Auto ID – What are the options?
•  SQL dummy table
•  Easy & familiar, but limited
•  Pre-generated range
•  Proposed by @mdennis
•  Distributed, but more complicated to implement
•  Sharding [Instagram]
•  Discovered too late
•  Unfamiliar with Postgres
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
We chose Snowflake
•  Built by Twitter, Apache 2.0 license
•  https://github.com/twitter/snowflake
•  “… network service for generating unique ID numbers at high
scale..”
•  Same motivation; MySQL -> C*
•  A few tweaks for our Windows environment
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Technical reasons for Snowflake
•  Meets all requirements
•  Tested in high transaction system
•  Java based [Scala] implementation
•  Thrift server
•  Run as a Windows service with Apache Daemon
•  Con: Requires Apache Zookeeper
•  Coordinate the worker id
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Connecting to Snowflake
•  Built our own .NET
Snowflake Client
•  Snowflake server on each
web node
•  Local instance is primary
•  Round robin failover to other
nodes
•  Auto failover AND recovery
•  “Circuit Breaker” pattern
Web	
  
App	
  
SF	
  
Server	
  1	
  
Web	
  
App	
  
SF	
  
Server	
  3	
  
Web	
  
App	
  
SF	
  
Server	
  2	
  
Web	
  
App	
  
SF	
  
Server	
  4	
  
#Cassandra13	
  	
  
Challenges
•  C* does not have Auto Id generation.
•  How to connect to C* with C#?
•  Finding a connector with good Failure Tolerance.
•  How to integrate our reporting system?
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Connecting to Cassandra with C#
•  Thrift alone too low level
•  Needs
•  CQL support
•  Active development / support
•  Wants
•  ADO.NET / LINQ feel
•  ????
•  FluentCassandra is where we started
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Vetting FluentCassandra
•  Pros
•  Open source -
https://github.com/fluentcassandra/fluentcassandra
•  Nick Berardi, project owner, is excellent
•  Designed for CQL
•  Familiar feel
•  Were able to start project development with it
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Vetting FluentCassandra
•  Cons
•  Immaturity
•  Few users with high transaction system
•  Permanent node blacklisting
•  Lacked auto retry
•  Couldn’t live with these limitations
•  Tried hiring independent contractor to help us mature it
#Cassandra13	
  	
  
Challenges
•  C* does not have Auto Id generation.
•  How to connect to C* with C#?
•  Finding a connector with good Failure Tolerance.
•  How to integrate our reporting system?
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Hector: Yes, please
•  Popular C* connector
•  Use cases matching ours
•  Good maturity
•  Auto node discovery
•  Auto retry
•  Auto failure recovery
•  Written in Java – major roadblock
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Help!
•  We knew we still needed help.
•  We found a company named Concord.
•  Based out of the Twin Cites.
•  Specialize in System, Process, and Data Integration.
•  http://concordusa.com/
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Concord’s Recommendation
•  Concord recommended that we use IKVM.NET to port Hector to
a .NET assembly.
•  They had previous success using IKVM for other Java to .NET
ports.
•  They felt that maturing FluentCassandra was going to take
longer than our timeline allowed.
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
About the IKVM.NET Project
•  http://www.ikvm.net/
•  Open Source Project.
•  Main contributor is Jeroen Frijters.
•  He is actively contributing to the project.
•  License allows for use in commercial applications.
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
What is IKVM.NET?
•  IKVM.NET includes the following components:
•  A Java Virtual Machine implemented in .NET.
•  A .NET implementation of the Java class libraries.
•  Set of tools that enable Java and .NET interoperability.
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Uses for IKVM
•  Drop-in JVM
•  Included is a distribution of a .NET implementation of a Java
Virtual Machine.
•  Allows you to run jar files using the .NET stack.
•  Example: ikvm -jar myapp.jar
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Uses for IKVM
•  Use Java libraries in your .NET applications
•  Using ikvmc you can compile Java bytecode to .NET IL.
•  Example: ikvmc -target:library mylib.jar
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Uses for IKVM
•  Develop .NET applications in Java
•  Write code in Java.
•  Compile to JVM bytecode.
•  Use ikvmc to produce a .NET Executable.
•  Can also use .NET API’s in Java code using the ikvmstub
application to generate a Java jar file.
•  Example: ikvmstub MyDotNetAssemblyName
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Hector Converted to .NET
•  Per Concord’s recommendation we chose to compile the Hector
jar into a .NET Assembly.
•  Hector and all of it’s dependencies are pulled into one .NET
dll that can be referenced by any .NET assembly.
•  In addition you will have to reference some core IKVM
assemblies.
•  Each Java dependency is given it’s own namespace with in
the .NET dll.
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
HectorNet
•  Concord also created a dll called HectorNet that wraps some of
the Hector behaviors and makes it feel more like .NET.
•  Such as supporting connection strings.
•  Mapping Thrift byte arrays to .NET data types.
•  Mapping to native .NET collections instead of using Java
collections.
#Cassandra13	
  	
  
Challenges
•  C* does not have Auto Id generation.
•  How to connect to C* with C#?
•  Finding a connector with good Failure Tolerance.
•  How to integrate our reporting system?
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Integrating Reporting
OLTP	
  
C*	
  
Extract	
   Transform	
  
CUBE	
  
SSAS	
  
OLAP	
  
MS	
  SQL	
  
Load	
  
ETL	
  -­‐	
  SSIS	
  
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Integrating Reporting
•  The SSIS Extract process uses C# Script Tasks.
•  Script Task needs references to HectorNet and all of its
dependencies.
•  SSIS can only reference assemblies that are in the GAC.
•  Assemblies in the GAC have to be Signed.
#Cassandra13	
  	
  
Why Not DataStax C# Driver?
•  We built everything using CQL 2.0.
•  Wasn’t ready in time for our launch date.
#Cassandra13	
  	
  
DSE for the Win!
•  We use DataStax Enterprise.
•  Mainly for support, which continues to be a life saver.
©2013 NativeX Holdings, LLC#Cassandra13	
  	
  
Thank you!
•  We are hiring
•  http://nativex.com/careers/
•  Join the MSP C* Meetup
•  http://www.meetup.com/Minneapolis-St-Paul-Cassandra-Meetup/
•  Contact us
•  Jeff.Smoley@nativex.com
•  Derek.Bromenshenkel@nativex.com @breakingtrail
•  Slide Deck
•  http://www.slideshare.net/jjsmoley/the-perils-and-triumphs-of-using-
cassandra-at-a-netmicrosoft-shop

More Related Content

PPTX
The Perils and Triumphs of using Cassandra at a .NET/Microsoft Shop
PPTX
Password Policies in Oracle Access Manager. How to improve user authenticatio...
PPTX
Running Oracle EBS in the cloud (DOAG TECH17 edition)
PDF
Cloud orchestration major tools comparision
PPTX
Digitally Transform (And Keep) Your On-Premises File Servers
PPT
Tool Academy: Web Archiving
PDF
AZ-104 Questions Answers Dumps
PDF
Docker San Diego 2015-03-25
The Perils and Triumphs of using Cassandra at a .NET/Microsoft Shop
Password Policies in Oracle Access Manager. How to improve user authenticatio...
Running Oracle EBS in the cloud (DOAG TECH17 edition)
Cloud orchestration major tools comparision
Digitally Transform (And Keep) Your On-Premises File Servers
Tool Academy: Web Archiving
AZ-104 Questions Answers Dumps
Docker San Diego 2015-03-25

What's hot (20)

PDF
Melbourne Chef Meetup: Automating Azure Compliance with InSpec
PDF
Cassandra and security
PDF
Microsoft az-104 Dumps
PPTX
Overview of HDFS Transparent Encryption
PPTX
Surviving the Azure Avalanche
PDF
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
PPTX
Docker - The Big Picture
PPTX
Protect your private data with ORC column encryption
PPTX
Securing kafka with 500 billion messages a day
PDF
Az 104 session 8 azure monitoring
PDF
Database-as-a-Service with Oracle Enterprise Manager Cloud Control 12c and Or...
PPTX
Securing Hadoop's REST APIs with Apache Knox Gateway Hadoop Summit June 6th, ...
PPTX
Integrating Okta with Anypoint Platform for a mobile security use case
PPTX
Turbocharging php applications with zend server
PPTX
Transparent Encryption in HDFS
PPTX
Hdp security overview
PDF
Az 104 session 4: azure storage
PPTX
An Approach for Multi-Tenancy Through Apache Knox
PDF
Net core vs. node.js what to choose when
PPTX
Hadoop security
Melbourne Chef Meetup: Automating Azure Compliance with InSpec
Cassandra and security
Microsoft az-104 Dumps
Overview of HDFS Transparent Encryption
Surviving the Azure Avalanche
Refactoring Into Microservices. Chicago Coders Conference 2017-06-26
Docker - The Big Picture
Protect your private data with ORC column encryption
Securing kafka with 500 billion messages a day
Az 104 session 8 azure monitoring
Database-as-a-Service with Oracle Enterprise Manager Cloud Control 12c and Or...
Securing Hadoop's REST APIs with Apache Knox Gateway Hadoop Summit June 6th, ...
Integrating Okta with Anypoint Platform for a mobile security use case
Turbocharging php applications with zend server
Transparent Encryption in HDFS
Hdp security overview
Az 104 session 4: azure storage
An Approach for Multi-Tenancy Through Apache Knox
Net core vs. node.js what to choose when
Hadoop security
Ad

Similar to C* Summit 2013: The Perils and Triumphs of using Cassandra at a .NET/Microsoft Shop by Derek Bromenshenkel and Jeff Smoley (20)

PPTX
MinneBar 2013 - Scaling with Cassandra
PPTX
Minnebar 2013 - Scaling with Cassandra
PDF
Cassandra 2.0 to 2.1
PDF
How Hailo fuels its growth using NoSQL storage and analytics - Dave Gardner (...
PPTX
Apache Cassandra Lunch #64: Cassandra for .NET Developers
PDF
Building Asynchronous Applications
PDF
Download full ebook of Flex on Java Bernerd Allmon instant download pdf
PPTX
Unit -3 _Cassandra-CRUD Operations_Practice Examples
PPTX
Unit -3 -Features of Cassandra, CQL Data types, CQLSH, Keyspaces
PDF
Download full ebook of Flex on Java Bernerd Allmon instant download pdf
PDF
C* Summit 2013: Aligning Technology Infrastructure With Horizontal Business G...
PPTX
Cabs, Cassandra, and Hailo
PDF
C* Summit 2013: No Whistling Required: Cabs, Cassandra, and Hailo by Dave Gar...
PDF
JAX London 2015 - Architecting a Highly Scalable Enterprise
PPTX
Cassandra implementation for collecting data and presenting data
PDF
Cassandra Prophecy
PPT
Scalable Architectures, Enterprise Solutions with Opensource and Free Software
PPT
Reporting from the Trenches: Intuit & Cassandra
PDF
Nflx ds meetup-5_dec2012
PPTX
Cassandra Deep Diver & Data Modeling
MinneBar 2013 - Scaling with Cassandra
Minnebar 2013 - Scaling with Cassandra
Cassandra 2.0 to 2.1
How Hailo fuels its growth using NoSQL storage and analytics - Dave Gardner (...
Apache Cassandra Lunch #64: Cassandra for .NET Developers
Building Asynchronous Applications
Download full ebook of Flex on Java Bernerd Allmon instant download pdf
Unit -3 _Cassandra-CRUD Operations_Practice Examples
Unit -3 -Features of Cassandra, CQL Data types, CQLSH, Keyspaces
Download full ebook of Flex on Java Bernerd Allmon instant download pdf
C* Summit 2013: Aligning Technology Infrastructure With Horizontal Business G...
Cabs, Cassandra, and Hailo
C* Summit 2013: No Whistling Required: Cabs, Cassandra, and Hailo by Dave Gar...
JAX London 2015 - Architecting a Highly Scalable Enterprise
Cassandra implementation for collecting data and presenting data
Cassandra Prophecy
Scalable Architectures, Enterprise Solutions with Opensource and Free Software
Reporting from the Trenches: Intuit & Cassandra
Nflx ds meetup-5_dec2012
Cassandra Deep Diver & Data Modeling
Ad

More from DataStax Academy (20)

PDF
Forrester CXNYC 2017 - Delivering great real-time cx is a true craft
PPTX
Introduction to DataStax Enterprise Graph Database
PPTX
Introduction to DataStax Enterprise Advanced Replication with Apache Cassandra
PPTX
Cassandra on Docker @ Walmart Labs
PDF
Cassandra 3.0 Data Modeling
PPTX
Cassandra Adoption on Cisco UCS & Open stack
PDF
Data Modeling for Apache Cassandra
PDF
Coursera Cassandra Driver
PDF
Production Ready Cassandra
PDF
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
PPTX
Cassandra @ Sony: The good, the bad, and the ugly part 1
PPTX
Cassandra @ Sony: The good, the bad, and the ugly part 2
PDF
Standing Up Your First Cluster
PDF
Real Time Analytics with Dse
PDF
Introduction to Data Modeling with Apache Cassandra
PDF
Cassandra Core Concepts
PPTX
Enabling Search in your Cassandra Application with DataStax Enterprise
PPTX
Bad Habits Die Hard
PDF
Advanced Data Modeling with Apache Cassandra
PDF
Advanced Cassandra
Forrester CXNYC 2017 - Delivering great real-time cx is a true craft
Introduction to DataStax Enterprise Graph Database
Introduction to DataStax Enterprise Advanced Replication with Apache Cassandra
Cassandra on Docker @ Walmart Labs
Cassandra 3.0 Data Modeling
Cassandra Adoption on Cisco UCS & Open stack
Data Modeling for Apache Cassandra
Coursera Cassandra Driver
Production Ready Cassandra
Cassandra @ Netflix: Monitoring C* at Scale, Gossip and Tickler & Python
Cassandra @ Sony: The good, the bad, and the ugly part 1
Cassandra @ Sony: The good, the bad, and the ugly part 2
Standing Up Your First Cluster
Real Time Analytics with Dse
Introduction to Data Modeling with Apache Cassandra
Cassandra Core Concepts
Enabling Search in your Cassandra Application with DataStax Enterprise
Bad Habits Die Hard
Advanced Data Modeling with Apache Cassandra
Advanced Cassandra

Recently uploaded (20)

PDF
Five Habits of High-Impact Board Members
PDF
Developing a website for English-speaking practice to English as a foreign la...
PDF
1 - Historical Antecedents, Social Consideration.pdf
PPTX
Final SEM Unit 1 for mit wpu at pune .pptx
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
CloudStack 4.21: First Look Webinar slides
PDF
TrustArc Webinar - Click, Consent, Trust: Winning the Privacy Game
DOCX
search engine optimization ppt fir known well about this
PDF
sustainability-14-14877-v2.pddhzftheheeeee
PPTX
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
PDF
Taming the Chaos: How to Turn Unstructured Data into Decisions
PDF
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
PDF
STKI Israel Market Study 2025 version august
PDF
A Late Bloomer's Guide to GenAI: Ethics, Bias, and Effective Prompting - Boha...
PDF
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
PDF
Enhancing emotion recognition model for a student engagement use case through...
PPTX
Group 1 Presentation -Planning and Decision Making .pptx
PDF
A novel scalable deep ensemble learning framework for big data classification...
PDF
Getting started with AI Agents and Multi-Agent Systems
PPTX
Tartificialntelligence_presentation.pptx
Five Habits of High-Impact Board Members
Developing a website for English-speaking practice to English as a foreign la...
1 - Historical Antecedents, Social Consideration.pdf
Final SEM Unit 1 for mit wpu at pune .pptx
Assigned Numbers - 2025 - Bluetooth® Document
CloudStack 4.21: First Look Webinar slides
TrustArc Webinar - Click, Consent, Trust: Winning the Privacy Game
search engine optimization ppt fir known well about this
sustainability-14-14877-v2.pddhzftheheeeee
MicrosoftCybserSecurityReferenceArchitecture-April-2025.pptx
Taming the Chaos: How to Turn Unstructured Data into Decisions
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
STKI Israel Market Study 2025 version august
A Late Bloomer's Guide to GenAI: Ethics, Bias, and Effective Prompting - Boha...
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
Enhancing emotion recognition model for a student engagement use case through...
Group 1 Presentation -Planning and Decision Making .pptx
A novel scalable deep ensemble learning framework for big data classification...
Getting started with AI Agents and Multi-Agent Systems
Tartificialntelligence_presentation.pptx

C* Summit 2013: The Perils and Triumphs of using Cassandra at a .NET/Microsoft Shop by Derek Bromenshenkel and Jeff Smoley

  • 1. reimagining the business of apps #Cassandra13     ©2013 NativeX Holdings, LLC The Perils and Triumphs of using Cassandra at a .NET/Microsoft Shop
  • 2. #Cassandra13     About the Presenters Jeff Smoley – Infrastructure Architect Derek Bromenshenkel – Infrastructure Architect
  • 3. #Cassandra13     Agenda •  About NativeX •  Why Cassandra? •  Challenges •  Auto Id Generation •  FluentCassandra •  Hector •  IKVM.NET •  HectorNet •  Reporting Integration
  • 4. ©2013 NativeX Holdings, LLC#Cassandra13     About NativeX •  Formerly W3i •  Home Office in Sartell, MN •  75 miles NW of Minneapolis •  Remote Offices in MSP and SF •  150 Employees
  • 5. ©2013 NativeX Holdings, LLC#Cassandra13     What NativeX Does •  Marketing technology platform that enables developers to build successful business around their apps. •  We provide Publishers with a way to monetize and Advertisers with a way to gain distribution.
  • 6. #Cassandra13     Mobile Vanity Metrics •  Over 700M unique devices •  1000s of Apps •  > 100M Monthly Active Users •  > 200GB of data ingest per week
  • 7. ©2013 NativeX Holdings, LLC#Cassandra13     Backstory •  From 100M session/quarter to 5B. •  Anticipate 7B sessions in Q2. •  Growth was anticipated. •  Realized infrastructure needed to change to support this. 0   1   2   3   4   5   6   2011  Q4   2012  Q1   2012  Q2   2012  Q3   2012  Q4   2013  Q1   Billions   API  Requests  
  • 8. ©2013 NativeX Holdings, LLC#Cassandra13     Original OLTP Architecture •  Microsoft SQL Server •  2 Node Cluster (Failover) •  12 cores / node •  192 GB mem / node •  Compellent SAN •  172 Tiered Disk •  SSD, FC, SATA
  • 9. ©2013 NativeX Holdings, LLC#Cassandra13     Objectives Scale   • Horizontal   • Incremental  cost   structure   Resiliency   • No  single  point   of  failure   • Geographically   distributed  
  • 10. ©2013 NativeX Holdings, LLC#Cassandra13     What is NoSQL •  Stands for Not Only SQL. •  The NoSQL movement is about understanding problems and focusing on solutions. •  It’s not about silver bullets and black boxes. •  It is about using the right tool for the right problem.
  • 11. ©2013 NativeX Holdings, LLC#Cassandra13     Researched Products •  Compared features like: •  Distributed / Shared Nothing •  Multi-Cluster Support •  Maturity & Popularity •  Documentation •  .NET Support
  • 12. ©2013 NativeX Holdings, LLC#Cassandra13     Why Cassandra? •  Multi-node •  Multi-cluster •  Highly Available •  Durable •  Shared Nothing •  Tunable Consistency
  • 13. ©2013 NativeX Holdings, LLC#Cassandra13     Cassandra at NativeX •  C* was not a replacement DB system. •  We continue to use MS SQL Server alongside C*. •  SQL Server used for storing configuration data. •  C* solves a very specific problem for us. •  Writing large volumes of data quickly. •  Reading very specific data out of a large record set.
  • 14. #Cassandra13     Challenges •  C* does not have Auto Id generation. •  How to connect to C* with C#? •  Finding a connector with good Failure Tolerance. •  How to integrate our reporting system?
  • 15. ©2013 NativeX Holdings, LLC#Cassandra13     Auto ID Generation •  Pre-existing requirements •  Unique, 64-bit positive integers •  Increasing (sortable) a plus •  Previously SQL Server Identity column •  A Time-based UUID is sortable and unique •  Changed everything we could •  The future for us
  • 16. ©2013 NativeX Holdings, LLC#Cassandra13     Auto ID – What are the options? •  SQL dummy table •  Easy & familiar, but limited •  Pre-generated range •  Proposed by @mdennis •  Distributed, but more complicated to implement •  Sharding [Instagram] •  Discovered too late •  Unfamiliar with Postgres
  • 17. ©2013 NativeX Holdings, LLC#Cassandra13     We chose Snowflake •  Built by Twitter, Apache 2.0 license •  https://github.com/twitter/snowflake •  “… network service for generating unique ID numbers at high scale..” •  Same motivation; MySQL -> C* •  A few tweaks for our Windows environment
  • 18. ©2013 NativeX Holdings, LLC#Cassandra13     Technical reasons for Snowflake •  Meets all requirements •  Tested in high transaction system •  Java based [Scala] implementation •  Thrift server •  Run as a Windows service with Apache Daemon •  Con: Requires Apache Zookeeper •  Coordinate the worker id
  • 19. ©2013 NativeX Holdings, LLC#Cassandra13     Connecting to Snowflake •  Built our own .NET Snowflake Client •  Snowflake server on each web node •  Local instance is primary •  Round robin failover to other nodes •  Auto failover AND recovery •  “Circuit Breaker” pattern Web   App   SF   Server  1   Web   App   SF   Server  3   Web   App   SF   Server  2   Web   App   SF   Server  4  
  • 20. #Cassandra13     Challenges •  C* does not have Auto Id generation. •  How to connect to C* with C#? •  Finding a connector with good Failure Tolerance. •  How to integrate our reporting system?
  • 21. ©2013 NativeX Holdings, LLC#Cassandra13     Connecting to Cassandra with C# •  Thrift alone too low level •  Needs •  CQL support •  Active development / support •  Wants •  ADO.NET / LINQ feel •  ???? •  FluentCassandra is where we started
  • 22. ©2013 NativeX Holdings, LLC#Cassandra13     Vetting FluentCassandra •  Pros •  Open source - https://github.com/fluentcassandra/fluentcassandra •  Nick Berardi, project owner, is excellent •  Designed for CQL •  Familiar feel •  Were able to start project development with it
  • 23. ©2013 NativeX Holdings, LLC#Cassandra13     Vetting FluentCassandra •  Cons •  Immaturity •  Few users with high transaction system •  Permanent node blacklisting •  Lacked auto retry •  Couldn’t live with these limitations •  Tried hiring independent contractor to help us mature it
  • 24. #Cassandra13     Challenges •  C* does not have Auto Id generation. •  How to connect to C* with C#? •  Finding a connector with good Failure Tolerance. •  How to integrate our reporting system?
  • 25. ©2013 NativeX Holdings, LLC#Cassandra13     Hector: Yes, please •  Popular C* connector •  Use cases matching ours •  Good maturity •  Auto node discovery •  Auto retry •  Auto failure recovery •  Written in Java – major roadblock
  • 26. ©2013 NativeX Holdings, LLC#Cassandra13     Help! •  We knew we still needed help. •  We found a company named Concord. •  Based out of the Twin Cites. •  Specialize in System, Process, and Data Integration. •  http://concordusa.com/
  • 27. ©2013 NativeX Holdings, LLC#Cassandra13     Concord’s Recommendation •  Concord recommended that we use IKVM.NET to port Hector to a .NET assembly. •  They had previous success using IKVM for other Java to .NET ports. •  They felt that maturing FluentCassandra was going to take longer than our timeline allowed.
  • 28. ©2013 NativeX Holdings, LLC#Cassandra13     About the IKVM.NET Project •  http://www.ikvm.net/ •  Open Source Project. •  Main contributor is Jeroen Frijters. •  He is actively contributing to the project. •  License allows for use in commercial applications.
  • 29. ©2013 NativeX Holdings, LLC#Cassandra13     What is IKVM.NET? •  IKVM.NET includes the following components: •  A Java Virtual Machine implemented in .NET. •  A .NET implementation of the Java class libraries. •  Set of tools that enable Java and .NET interoperability.
  • 30. ©2013 NativeX Holdings, LLC#Cassandra13     Uses for IKVM •  Drop-in JVM •  Included is a distribution of a .NET implementation of a Java Virtual Machine. •  Allows you to run jar files using the .NET stack. •  Example: ikvm -jar myapp.jar
  • 31. ©2013 NativeX Holdings, LLC#Cassandra13     Uses for IKVM •  Use Java libraries in your .NET applications •  Using ikvmc you can compile Java bytecode to .NET IL. •  Example: ikvmc -target:library mylib.jar
  • 32. ©2013 NativeX Holdings, LLC#Cassandra13     Uses for IKVM •  Develop .NET applications in Java •  Write code in Java. •  Compile to JVM bytecode. •  Use ikvmc to produce a .NET Executable. •  Can also use .NET API’s in Java code using the ikvmstub application to generate a Java jar file. •  Example: ikvmstub MyDotNetAssemblyName
  • 33. ©2013 NativeX Holdings, LLC#Cassandra13     Hector Converted to .NET •  Per Concord’s recommendation we chose to compile the Hector jar into a .NET Assembly. •  Hector and all of it’s dependencies are pulled into one .NET dll that can be referenced by any .NET assembly. •  In addition you will have to reference some core IKVM assemblies. •  Each Java dependency is given it’s own namespace with in the .NET dll.
  • 34. ©2013 NativeX Holdings, LLC#Cassandra13     HectorNet •  Concord also created a dll called HectorNet that wraps some of the Hector behaviors and makes it feel more like .NET. •  Such as supporting connection strings. •  Mapping Thrift byte arrays to .NET data types. •  Mapping to native .NET collections instead of using Java collections.
  • 35. #Cassandra13     Challenges •  C* does not have Auto Id generation. •  How to connect to C* with C#? •  Finding a connector with good Failure Tolerance. •  How to integrate our reporting system?
  • 36. ©2013 NativeX Holdings, LLC#Cassandra13     Integrating Reporting OLTP   C*   Extract   Transform   CUBE   SSAS   OLAP   MS  SQL   Load   ETL  -­‐  SSIS  
  • 37. ©2013 NativeX Holdings, LLC#Cassandra13     Integrating Reporting •  The SSIS Extract process uses C# Script Tasks. •  Script Task needs references to HectorNet and all of its dependencies. •  SSIS can only reference assemblies that are in the GAC. •  Assemblies in the GAC have to be Signed.
  • 38. #Cassandra13     Why Not DataStax C# Driver? •  We built everything using CQL 2.0. •  Wasn’t ready in time for our launch date.
  • 39. #Cassandra13     DSE for the Win! •  We use DataStax Enterprise. •  Mainly for support, which continues to be a life saver.
  • 40. ©2013 NativeX Holdings, LLC#Cassandra13     Thank you! •  We are hiring •  http://nativex.com/careers/ •  Join the MSP C* Meetup •  http://www.meetup.com/Minneapolis-St-Paul-Cassandra-Meetup/ •  Contact us •  Jeff.Smoley@nativex.com •  Derek.Bromenshenkel@nativex.com @breakingtrail •  Slide Deck •  http://www.slideshare.net/jjsmoley/the-perils-and-triumphs-of-using- cassandra-at-a-netmicrosoft-shop