# Apache Cassandra

Apache Cassandra és un sistema d'administració de bases de dades distribuïdes de codi obert dissenyat per manipular grans quantitats de dades en diversos servidors, oferint una alta disponibilitat sense un únic punt de fallada. El sistema prioritza la disponibilitat i l'escalabilitat per sobre de la coherència, per la qual cosa és especialment adequat per a sistemes amb requisits d'alt rendiment d'escriptura a causa del seu arbre LSM capa d'emmagatzematge d'indexació. amb asíncrona i replicació sense mestre. Permet operacions de baixa latència per a tots els clients i incorpora Amazon's Dynamo emmagatzematge distribuït i tècniques de replicació, combinades amb el model de motor d'emmagatzematge de dades Google's Bigtable.
Cassandra també té com a punt fort el rendiment. El 2012, investigadors de la Universitat de Toronto que estudiaven els sistemes NoSQL van concloure que "En termes d'escalabilitat, hi ha un clar guanyador a través dels nostres experiments. Cassandra aconsegueix el rendiment més alt pel nombre màxim de nodes en tots els experiments", no obstant,"la latència és elevada en operacions d'escriptura i lectura".
El model de dades de Cassandra és una fila dividida on es guarden les dades de forma consistent. Les files estan organitzades en taules; el primer component de la clau principal d'una taula és la clau de partició; dins d'una partició, les files són indexades per les columnes restants de la clau. Altres columnes poden ser indexades per separat de la clau principal.
Les taules poden ser creades, eliminades i modificades en temps d'execució sense bloquejar actualitzacions i consultes.
Cassandra no suporta joins o subqueries, sinó que emfatitza en la desnormalització a través de característiques com les col·leccions.

## Història

Apache Cassandra va ser desenvolupat inicialment per Facebook, per impulsar la funció de cerca de la safata d'entrada, creada per Avinash Lakshman (un dels autors de "Amazon's Dynamo") i Prashant Malik.
* Va sorgir com un projecte de codi obert en "Google code" al juliol del 2008.
* El març de 2009, es va convertir en un projecte d'Apache Incubator.
* El 17 de febrer de 2010 es va passar a considerar com a projecte de nivell superior.
* Posteriorment, el projecte va ser nomenat com la profeta de la mitològica grega Cassandra.
Altres modificacions:
* 0.6, 12 Abril 2010, afegeix suport per a l'emmagatzematge en memòria cau integrada i "Apache Hadoop MapReduce".
* 0.7, 08 Gener 2011, afegeix índexs secundaris i els canvis d'esquema en línia.
* 0.8, 02 Juny 2011, afegeix l'Idioma Cassandra Query (CGL) i el suport a les actualitzacions sense temps d'inactivitat.
* 1.0, 17 Octubre 2011, afegeix la compressió integrada, compactació per nivells i millora el rendiment de lectura.
* 1.1, 23 Abril 2012, afegeix l'administració automàtica de la memòria cau, l'aïllament a nivell de fila, i suport per a SSD.
* 1.2, 02 Gener 2013, afegeix agrupació a través de nodes virtuals, la comunicació entre nodes, agrupació atòmica i sol·licitud de recerca.
* 2.0, 04 Setembre 2013, afegeix les transaccions lleugers (basades en el protocol de consens Paxos), disparadors, compactacions millorades.
* 2.0.4, 30 Desembre 2013, afegeix permetre especificar els centres de dades per participar en una reparació i suport de xifrat pel client.
* 2.1.0, 10 Setembre 2014.
* 2.1.6, 08 Juny 2015.
* 2.1.7, 22 Juny 2015.
* 2.2.0, 20 Juliol 2015.
* 2.2.2, 05 Octubre 2015.
| Versió | Data de llançament | Darrera versió | Data d'estrena | Estat |
| Una versió antiga, sense suport: 0.6 | 2010-04-12 | 0.6.13 | 2011-04-18 | No suportat |
| Una versió antiga, sense suport: 0.7 | 2011-01-10 | 0.7.10 | 2011-10-31 | No suportat |
| Una versió antiga, sense suport: 0.8 | 2011-06-03 | 0.8.10 | 2012-02-13 | No suportat |
| Una versió antiga, sense suport: 1.0 | 2011-10-18 | 1.0.12 | 2012-10-04 | No suportat |
| Una versió antiga, sense suport: 1.1 | 2012-04-24 | 1.1.12 | 2013-05-27 | No suportat |
| Una versió antiga, sense suport: 1.2 | 2013-01-02 | 1.2.19 | 2014-09-18 | No suportat |
| Una versió antiga, sense suport: 2.0 | 2013-09-03 | 2.0.17 | 2015-09-21 | No suportat |
| Una versió antiga, encara amb suport: 2.1 | 2014-09-16 | 2.1.10 | 2015-10-05 | Suportada, només correccions |
| Una versió antiga, encara amb suport: 2.2 | 2015-07-20 | 2.2.2 | 2015-10-05 | Suportada |
| Una versió antiga, encara amb suport: 3.0 | 2015-11-09 | 3.0.15 | 2017-10-10 | Suportada |
| La darrera versió estable: 3.11 | 2017-06-23 | 3.11.1 | 2017-10-10 | Actual |
| Llegenda:Versió antigaVersió antiga, amb suportDarrera versióDarrera versió preliminarProper llançament |||||

## Llicencia i suport

Apache Cassandra és un projecte d'Apache Software Foundation, pel que té una llicència d'Apache (versió 2.0).

## Característiques principals
### Descentralitzat

    Tots els nodes del clúster tenen el mateix paper. No hi ha cap punt únic de fallada. Les dades es distribueixen a través del clúster (pel que cada node conté dades diferents), i com no hi ha un node mestre, per tant, cada node pot donar servei a qualsevol sol·licitud.

### Admet la replicació i replicació de múltiples centres de dades

    Les estrategies de configuració són configurables. Cassandra està dissenyat com un sistema distribuït, per al desplegament d'un gran nombre de nodes a través de múltiples centres de dades. Les principals característiques de l'arquitectura distribuïda de Cassandra estan dissenyades específicament pel desplegament de centre de dades múltiples, per la redundància i la recuperació de desastres.

### Escalabilitat

    El rendiment de llegir i escriure augmenta linealment a mesura que s'afegeixen nous nodes. Es poden afegir nous nodes sense necessitat d'interrompre l'execució de l'aplicació.

### Tolerant a fallades

    Les dades es repliquen automàticament a diversos nodes per recuperar-se de possibles fallades. Cassandra suporta replicació de dades a través de múltiples centres de dades. Es poden substituir nodes que presentin errors sense temps d'inactivitat o interruptor de l'aplicació.

### Consistència

    S'ofereix l'elecció del nivell de consistència per lectures i escriptures.

### Suport MapReduce

    Cassandra té integració Apache Hadoop per suportar MapReduce. També existeix suport per Apache Pig i Apache Hive.

### Llenguatge de consulta

    Cassandra introdueix CQL (Cassandra Query Language), una alternativa similar a SQL per a la interfície RPC tradicional. Existeixen drivers disponibles per a Java (JDBC), Python (DBAPI2), NODE.JS (Heleno), Go (gocql) i C ++.
A continuació un exemple de la creació keyspace, incloent una "família columna" en CQL 3.0:
I com a resultat obtenim:

## Model de dades

Cassandra és essencialment un híbrid entre un model clau-valor i una base de dades tabular (orientada a columnes).
    La família de columnes (anomenada "taula" a CQL 3) s'assembla a una taula en un RDBMS. Aquestes "taules" contenen files i columnes. Cada fila està identificada per una clau de fila. Cada fila té diverses columnes, cadascuna de les quals té un nom, un valor, i una marca de temps. A diferència d'una taula en un RDBMS, diferents files de la mateixa família de la columna no han de compartir el mateix conjunt de columnes, i una columna es pot afegir a una o diverses files en qualsevol moment.
Cada clau en Cassandra correspon a un valor que és un objecte. Cada clau té valors com columnes i les columnes s'agrupen en conjunts anomenats famílies de columnes.
Per tant, cada clau identifica una fila d'un nombre variable d'elements. Aquestes famílies de columnes podrien considerar-se com taules. Una taula en Cassandra és un mapa multidimensional distribuït indexat per una clau.
A més, les aplicacions poden especificar l'ordre de classificació de columnes dins d'una Super Column o Simple Column family.

## "Clustering"

Quan es dissenya el clúster per Apache Cassandra, un punt important és seleccionar la partició correcta. Existeixen 2 tipus de partició:
* Partició Aleatòria (RP): Aquesta partició distribueix les parelles clau-valor d'una forma aleatòria sobre la xarxa, aconseguint un bon balanceig de la carrega. Si el comparem amb OPP, en aquest model (RP) cal accedir a més nodes per obtenir un nombre de claus.
* Partició Preservar Ordre (OPP): Aquest tipus de partició distribueix les parelles clau-valor de manera natural, on les claus similars es mantenen properes entre elles. L'avantatge és que només cal accedir a un nombre reduït de nodes. La desavantatge és la distribució irregular de les parelles clau-valor als diferents nodes.

## Usuaris destacables

* @WalmartLabs (previously Kosmix) utilitza Cassandra amb SSD.
* Amadeus IT Group utilitza Cassandra pels seus sistemes de "back-end".
* Apple utilitza 100.000 nodes Cassandra.
* AppScale utilitza Cassandra com "back-end" per a les aplicacions de Google App Engine.
* CERN utilitza un prototip basat en Cassandra pel seu experiment ATLAS per arxivar la informació en línia del seu sistema de supervisió DAQ.
* Cisco's WebEx utilitza Cassandra per emmagatzemar la retroalimentació i les activitats dels seus usuaris en temps real.
* Cloudkick utilitza Cassandra per emmagatzemar mètriques dels servidors dels seus usuaris.
* Constant Contact utilitza Cassandra en les seves aplicacions de correu electrònic i xarxes socials.
* Digg, TechCrunch, un gran lloc de notícies, va publicar el 9 de setembre del 2009 que va començar a fer servir Cassandra.
* Facebook utilitza Cassandra per un sistema de cerca a la safata d'entrada, amb una implementació de més de 200 nodes.
* Formspring utilitza Cassandra per comptar respostes i també per emmagatzemar dades com seguidors, usuaris bloquejats, etc.
* IBM va realitzar investigacions per desenvolupar un sistema de correu electrònic basat en Cassandra.
* Mahalo.com utilitza Cassandra per guardar l'activitat dels seus usuaris i altres dades pel Q&A.
* Netflix utilitza Cassandra com base de dades de "back-end" pel seu servei de "streaming".
* Nutanix utilitza Cassandra per emmagatzemar metadades i estadístiques.
* Ooyala va construir un motor analític, escalable, flexible i en temps real utilitzant Cassandra.
* Openwave utilitza Cassandra com base de dades distribuïda i com a mecanisme d'emmagatzematge per la seva plataforma de missatges de pròxima generació.
* OpenX té més de 130 nodes de Cassandra per OpenX Enterprise, on emmagatzema i replica anuncis i dades per propaganda.
* Plaxo ha "revisat 3 bilions de contactes de la seva base de dades, en comparació amb fons de dades públiques, i es van identificar aproximadament 600 milions de persones amb informació de contacte".
* PostRank utilitza Cassandra com a base de dades de "back-end".
* Rackspace utilitza Cassandra internament.
* Reddit va passar de "memcacheDB" a Casasndra el 12 de març de 2010 i va experimentar alguns problemes en Maig.
* RockYou utilitza Cassandra per gravar les cançons.
* SoundCloud utilitza Cassandra per emmagatzemar el "dashboard" dels seus usuaris.
* Talentica Software utilitza Cassandra com "back-end" per fer anàlisis de dades, amb més de 30 nodes, afegint al voltant de 200GB de dades diàriament.
* Tibbo Systems utilitza Cassandra per la configuracio i l'emmagatzematge d'AggreGate Platform.
* Twitter va anunciar que panifiquen canviar MySQL per Cassandra.
* Urban Airship utilitza Cassandra amb el servei d'emmagatzematge "movie", amb més de 160 milions d'aplicacions instal·lades en més de 80 milions de dispositius.
* Wikimedia utilitza Cassandra com a base de dades de "back-end".
* Zoho utilitza Cassandra per una pre-visualització de la seva safata d'entrada de Zoho Mail.
Facebook va canviar el seu desenvolupament de la versió preliminar d'Apache Cassandra a finals de 2010, ja que va substituir la cerca en la safata d'entrada per la seva plataforma de missatgeria. El 2012, Facebook va començar a fer servir Apache Cassandra a Instagram.

## Referències

* ↑ Carpenter, Jeff; Hewitt, Eben. Cassandra: The Definitive Guide. 3rd. O'Reilly Media, 2022. ISBN 978-1-4920-9710-5.
* ↑ «Apache Cassandra Documentation Overview». [Consulta: 21 gener 2021].

## Vegeu també

* Base de dades distribuïda
* Taules de hash distribuïdes
* NoSQL
* MongoDB

## Bibliografia

* Hewitt, Eben. Cassandra: The Definitive Guide. 1st. O'Reilly Media, 15 de desembre del 2010, p. 300. ISBN 978-1-4493-9041-9.
* Capriolo, Edward. Cassandra High Performance Cookbook. 1st. Packt Publishing, Juliol 15, 2011, p. 324. ISBN 1-84951-512-3.

## Enllaços externs

* «The Apache Cassandra Project». Forest Hill, MD, USA: The Apache Software Foundation.
* «Project Wik». Forest Hill, MD, USA: The Apache Software Foundation.
* Hewitt, Eben. «Adopting Apache Cassandra». InfoQ, C4Media Inc, 01-12-2010.