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:

Which gives:


== 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 ==
(en) Apache Cassandra – kategori av bilder, video eller lyd på Commons 
Mal:Wikiversity

Lakshman, Avinash (25. august 2008). «Cassandra - A structured storage system on a P2P Network». Engineering @ Facebook's Notes. Besøkt 17. juni 2014. 
«The Apache Cassandra Project». Forest Hill, MD, USA: The Apache Software Foundation. Besøkt 17. juni 2014. 
«Project Wiki». Forest Hill, MD, USA: The Apache Software Foundation. Besøkt 17. juni 2014.  Arkivert 14. juni 2014 hos Wayback Machine.
Hewitt, Eben (1. desember 2010). «Adopting Apache Cassandra». InfoQ, C4Media Inc. Besøkt 17. juni 2014. 
Lakshman, Avinash; Malik, Prashant (15. august 2009). «Cassandra - A Decentralized Structured Storage System» (PDF). The authors are from Facebook. Besøkt 17. juni 2014. 
Ellis, Jonathan (29. juli 2009). «What Every Developer Should Know About Database Scalability». Besøkt 17. juni 2014.  From the OSCON 2009 talk on RDBMS vs. Dynamo, Bigtable, and Cassandra.
«Cassandra-RPM - Red Hat Package Manager (RPM) build for the Apache Cassandra project». Menlo Park, CA, USA: Google Project Hosting. Besøkt 17. juni 2014. 
Roth, Gregor (14. oktober 2012). «Cassandra by example - the path of read and write requests». Besøkt 17. juni 2014. 
Mansoor, Umer (4. november 2012). «A collection of Cassandra tutorials». Besøkt 8. februar 2015. 
Bushik, Sergey (22. oktober 2012). «A vendor-independent comparison of NoSQL databases: Cassandra, HBase, MongoDB, Riak». NetworkWorld. Framingham, MA, USA and Staines, Middlesex, UK: IDG. Arkivert fra originalen 28. mai 2014. Besøkt 17. juni 2014.  Arkivert 28. mai 2014 hos Wayback Machine.