Apache Cassandra

**Apache Cassandra**  er en fri og åpen kildekode distribuert NoSQL database-system designet for å håndtere store mengder data på tvers av mange standard servere, som sørger for høy tilgjengelighet med ingen «single point of failure». Cassandra tilbyr robust støtte for klustre som strekker seg over flere datasentre, med asynkron replikering uten en master som tillater lav ventetid på alle operasjoner for alle klienter.

Cassandra vektlegger også ytelse. I 2012 konkluderte University of Toronto-forskere som studerte NoSQL-systemer med at «In terms of scalability, there is a clear winner throughout our experiments. Cassandra achieves the highest throughput for the maximum number of nodes in all experiments», selv om dette «this comes at the price of high write and read latencies.»

## Historie
Avinash Lakshman (en av forfatterne av Amazons Dynamo) og Prashant Malik utviklet Cassandra hos Facebook for å øke ytelsen til Facebooks innboks-søk.  Facebook slapp Cassandra som et open-source-prosjekt på Google code i juli 2008.  I mars 2009 ble det et Apache Incubator-prosjekt. 17. february 2010 ble prosjektet forfremmet til et «top-level»-prosjekt.

Facebook-utviklerne oppkalte deres database etter den mytologiske Trojan-profeten Cassandra.

Utgivelser inkluderer
* 0.6, sluppet 12. april 2010, added support for integrated caching, and Apache Hadoop MapReduce
* 0.7, sluppet 8. januar 2011, added secondary indexes and online schema changes
* 0.8, sluppet 2. juni 2011, added the Cassandra Query Language (CQL), self-tuning memtables, and support for zero-downtime upgrades
* 1.0, sluppet 17. oktober 2011, added integrated compression, leveled compaction, and improved read-performance
* 1.1, sluppet 23. april 2012, added self-tuning caches, row-level isolation, and support for mixed ssd/spinning disk deployments
* 1.2, sluppet 2. januar 2013, added clustering across virtual nodes, inter-node communication, atomic batches, and request tracing
* 2.0, sluppet 4. september 2013, added lightweight transactions (based on the Paxos consensus protocol), triggers, improved compactions
* 2.0.4, sluppet  30. desember 2013, added allowing specifying datacenters to participate in a repair, client encryption support to sstableloader, allow removing snapshots of no-longer-existing CFs
* 2.1.0 sluppet 10. september 2014 
* 2.1.6 sluppet 8. juni 2015
* 2.1.7 sluppet 22. juni 2015
* 2.2.0 sluppet 20. juli 2015
* 2.2.2 sluppet 5. oktober 2015
* 3.0 sluppet og senere slipp hver måned ved hjelp av en tick-tock-lik utgivelsesmodell, med like tall i utgivelser som både har nye egenskaper og feilrettinger, og odde tall med kun feilfiksinger.

## Hovedegenskaper

; Desentralisert
: Hver node i klusteret har den samme rollen. Det er ikke noe «single point of failure». Data er distribuert på tvers av klusteret, slik at hver node inneholder forskjellige data, men det er ikke noe master da hver node kan svare på hvilket som helst kall.

; Støtter replikering og replikering på tvers av flere datasentre
: Replikeringsstrategier er konfigurerbare. Cassandra er designet som et distribuert system, for utrulling på mange noder på tvers av flere datasentre. Nøkkelegenskaper til Cassandras distribuerte arkitektur er tilpasset multi-datasenter-utrullinger, for redundans,  for «failover» og katastrofeopprettelse.

; Skalerbarhet
: Lese- og skriveoperasjoner øker lineært når nye maskiner legges til, uten nedetid eller avbrudd i applikasjoner som benytter databasen.

; Feiltolerant
: Data kopieres automatisk til flere noder for feiltoleranse. Replikasjon på tvers av flere datasentre støttes. Noder som feiler kan erstattes uten nedetid.

; Tunbar konsistens
: Skrive- og leseoperasjoner gir et innstillbart konsistensnivå, helt fra «"writes never fail" til "block for all replicas to be readable" med quorum level i midten.

; MapReduce-støtte
: Cassandra har Hadoop-integrasjon med MapReduce-støtte. Det er også støtte for Apache Pig og Apache Hive.

; Spørrespråk
: Cassandra introduserte Cassandra Query Language (CQL). CQL er et enkelt grensesnitt for tilgang til Cassandra, som et alternativ til det tradisjonelle Structured Query Language (SQL). CQL legger til et abstraksjonslag som skjuler implementeringsdetaljer for denne strukturen og sørger for oversettelse til samlinger og andre vanlige kodinger. Språkdrivere er tilgjengelige for Java (JDBC), Python (DBAPI2), Node.JS (Helenus), Go (gocql) og C ++.

Nedenfor et eksempel på oppretting av nøkkelrommet («key space»), inkludert en kolonnefamilie i CQL 3.0:

```sql
CREATE KEYSPACE MyKeySpace
  WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 };

USE MyKeySpace;

CREATE COLUMNFAMILY MyColumns (id text, Last text, First text, PRIMARY KEY(id));

INSERT INTO MyColumns (id, Last, First) VALUES ('1', 'Doe', 'John');

SELECT * FROM MyColumns;
```

Which gives:

```dos
id | first | last
----+-------+------
  1 |  John |  Doe

(1 rows)
```


## Kjente problemer
Cassandra er ikke konsistent på radenivå, noe som betyr at innsettinger og oppdateringer i tabellen som påvirker samme rad som behandles omtrent samme tid, kan påvirke kolonnene som ikke-nøkkelkolonner på inkonsekvente måter. En oppdatering kan påvirke en kolonne mens en annen påvirker den andre, noe som resulterer i sett med verdier innenfor raden som aldri ble angitt.

## Datamodell
Cassandra er essensielt en hybrid mellom en «key-value» og en kolonne-orientert- (eller tabular)-databasesystem. Datamodellen er en partisjonert «row store» med tunbar konsistens. 
Rader er organisert i tabeller.

## Clustering
Når et cluster for Apache Cassandra designes, en viktig poeng er å velge riktig partisjonering. To partisjoneringer eksisterer:
# OrderPreservingPartitioner (OPP): Denne partitioner distribuerer key-value-par på en naturlig måte så like nøkler ikke er så lang fra hverandre. Fordelen med dette er at færre noder må aksesseres. Ulempen er at det er en ujevn distribusjon av key-value par.
# RandomPartitioner (RP): Denne partitionereren distribuerer tilfeldig key-value-par i nettverket, noe som resulterer i god lastbalansering. Sammenlignet med OPP, flere noder må aksesseres for å få et gitt antall nøkler.

## Styring og overvåking
Cassandra er et Java-basert system som kan styres og monitoreres via Java Management Extensions (JMX).

## Prominente brukere
Cassandra er den mest populære «wide column store», og i september 2014 gikk forbi Sybase til å bli den 9 mest populære databasen, rett bak Microsoft Access og SQLite.

*@WalmartLabs (previously Kosmix) uses Cassandra with SSD
* Amadeus IT Group uses Cassandra for some of their back-end systems.
*Apple uses 100,000 Cassandra nodes, as revealed at Cassandra Summit San Francisco 2015, although it has not elaborated for which products, services or features.
*AppScale uses Cassandra as a back-end for Google App Engine applications
*BlackRock uses Cassandra in their Aladdin investment management platform
*CERN used Cassandra-based prototype for its ATLAS experiment to archive the online DAQ system's monitoring information
*Cisco's WebEx uses Cassandra to store user feed and activity in near real time.
*Cloudkick uses Cassandra to store the server metrics of their users.
*Constant Contact uses Cassandra in their email and social media marketing applications. Over 200 nodes are deployed.
*Digg, a large social news website, announced on Sep 9th, 2009 that it is rolling out its use of Cassandra and confirmed this on March 8, 2010. TechCrunch has since linked Cassandra to Digg v4 reliability criticisms and recent company struggles. Lead engineers at Digg later rebuked these criticisms as red herring and blamed a lack of load testing.
*Discord uses Cassandra to store over 120 million messages per day.
*Facebook used Cassandra to power Inbox Search, with over 200 nodes deployed. This was abandoned in late 2010 when they built Facebook Messaging platform on HBase as they "found Cassandra's eventual consistency model to be a difficult pattern". Facebook moved off its pre-Apache Cassandra deployment in late 2010 when they replaced Inbox Search with the Facebook Messaging platform. In 2012, Facebook began using Apache Cassandra in its Instagram unit.
*Formspring uses Cassandra to count responses, as well as store Social Graph data (followers, following, blockers, blocking) for 26 Million accounts with 10 million responses a day
*IBM has done research in building a scalable email system based on Cassandra.
*Mahalo.com uses Cassandra to record user activity logs and topics for their Q&A website
*Netflix uses Cassandra as their back-end database for their streaming services
*Nutanix appliances use Cassandra to store metadata and stats.
*Ooyala built a scalable, flexible, real-time analytics engine using Cassandra
*Openwave uses  Cassandra as a distributed database and as a distributed storage mechanism for their next generation messaging platform
*OpenX is running over 130 nodes on Cassandra for their OpenX Enterprise product to store and replicate advertisements and targeting data for ad delivery
*Plaxo has "reviewed 3 billion contacts in [their] database, compared them with publicly available data sources, and identified approximately 600 million unique people with contact info."
*Plexistor for Apache Cassandra delivers high capacity storage at near-memory speed, reducing the need for expensive memory and dedicated servers. Plexistor can be used in Amazon AWS as well as on premise, running on Linux OS or on Docker containers.
*PostRank used Cassandra as their backend database
*Rackspace uses Cassandra internally.
*Reddit switched to Cassandra from memcacheDB on March 12, 2010 and experienced some problems in May due to insufficient nodes in their cluster.
*RockYou uses Cassandra to record every single click for 50 million Monthly Active Users in real-time for their online games
*SoundCloud uses Cassandra to store the dashboard of their users
*Talentica Software uses Cassandra as a back-end for Analytics Application with Cassandra cluster of 30 nodes and inserting around 200GB data on a daily basis.
* Tibbo Systems uses Cassandra as configuration and event storage for AggreGate Platform.
*Twitter announced it was planning to move entirely from MySQL to Cassandra, though soon after retracted this, keeping Tweets in MySQL while using Cassandra for analytics.
*Urban Airship uses Cassandra with the mobile service hosting for over 160 million application installs across 80 million unique devices
*Wikimedia uses Cassandra as backend storage for its public-facing REST Content API.

### Akademisk bakgrunn
* Bigtable - Original distribuert database av Google
* Distributed database
* Distributed hash table (DHT)
* Dynamo (lagringssystem) - Cassandra låner mange elementer fra Dynamo
* NoSQL

### Kommersielle selskap
* DataStax
* Impetus Technologies
* Cubet Techno Labs
* Instaclustr

### Alternativer
* Apache Accumulo – Sikker Apache Hadoop-basert distribuert database.
* Aerospike
* Berkeley DB
* Bigtable, tilgjengelig som del av Google Cloud Platform
* Druid (open-source datalagring)
* Amazon DynamoDB, som del av Amazon Web Services
* Apache HBase—Apache Hadoop-basert distribuert database; veldig lik Bigtable
* HyperDex
* Hypertable—Apache Hadoop-basert distribuert database; veldig lik Bigtable
* MongoDB
* Riak
* Scylla Apache Cassandra-kompatibel alternativ skrevet i C++

## Referanser


## Bibliografi

*
*
*

## Eksterne lenker
* 
* 
*
*
*
*
*
* From the OSCON 2009 talk on RDBMS vs. Dynamo, Bigtable, and Cassandra.
*
*
*
*