Apache Cassandra

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda
Apache Cassandra
Cassandra logo.svg
Desarrollador
Apache Software Foundation
Información general
Diseñador Avinash Lakshman, Prashant Malik
Lanzamiento inicial 2008
Última versión estable 2.1.4 (1 de Abril del 2015)
Género Sistema de gestión de bases de datos
Programado en Java
Sistema operativo Multiplataforma
Licencia Apache License 2.0
Estado actual Activo
[editar datos en Wikidata]

Apache Cassandra es una base de datos NoSQL distribuida y basada en un modelo de almacenamiento de «clave-valor», de código abierto que está escrita en Java. Permite grandes volúmenes de datos en forma distribuida. Por ejemplo, lo usa Twitter para su plataforma. Su objetivo principal es la escalabilidad lineal y la disponibilidad. La arquitectura distribuida de Cassandra está basada en una serie de nodos iguales que se comunican con un protocolo P2P con lo que la redundancia es máxima. Está desarrollada por Apache Software Foundation.

Cassandra ofrece soporte robusto para múltiples centros de datos[1] , con la replicación asincrónica sin necesidad de un servidor maestro, que permiten operaciones de baja latencia para todos los clientes.

Cassandra también ofrece un gran rendimiento. En 2012, investigadores de la Universidad de Toronto que estudian los sistemas NoSQL concluyeron que "En términos de escalabilidad, hay un claro ganador a través de nuestros experimentos. Cassandra logra el más alto rendimiento para el número máximo de nodos en todos los experimentos", aunque "esto tiene como precio una alta latencia de escritura y lectura". [2]

El modelo de datos de Cassandra consiste en particionar las filas, que son reorganizadas en tablas [3] . Las claves primarias de cada tabla tiene un primer componente que es la clave de partición. Dentro de una partición, las filas son agrupadas por las columnas restantes de la clave. [4] Las demás columnas pueden ser indexadas por separado de la clave primaria[5] .

Las tablas se pueden crear, eliminar y alterar en tiempo de ejecución sin bloquear actualizaciones y consultas. [6]

Cassandra no soporta joins o subqueries, sino que enfatiza en la desnormalización a través de características como colecciones.[7]

En las versiones iniciales utilizaba un API propia para poder acceder a la base de datos. En los últimos tiempos están apostando por un lenguaje denominado CQL (Cassandra Query Language, no confundir con Contextual Query Language) que posee una sintaxis similar a SQL aunque con muchas menos funcionalidades. Esto hace que iniciarse en el uso de la misma sea más sencillo. Permite acceder en Java desde JDBC.


Historia[editar]

Apache Cassandra fue inicialmente desarollada en Facebook para impulsar las búsqueda en la bandeja de entrada por Avinash Lakshman (uno de los autores de Amazon's Dynamo) y Prashant Malik. Fue lanzada como un proyecto open source de Google code en julio de 2008.[8] En marzo de 2009, se transformó en un proyecto de Apache Incubator.[9] El 17 de febrero de 2010 se graduó como un proyecto de alto nivel.[10]

Publicaciones después de la graduación:

  • 0.6, 12 de abril de 2010, añaden soporte para cacheo integrado y para Apache Hadoop MapReduce[11]
  • 0.7, 08 de enero de 2011, añaden indices secundarios y cambios online en el "scheme" de la base de datos[12]
  • 0.8, 02 de junio de 2011, añaden el Cassandra Query Language (CQL), "self-tuning memtables", y soporte para mantenerse funcionando durante actualizaciones de versión[13]
  • 1.0, 17 de octubre de 2011, añaden compresión integrada, compactación por niveles y se mejora el desempeño de lectura[14]
  • 1.1, 23 de abril de 2012, añaden cache "self-tuning", aislación a nivel de fila y soporte para desarollo en múltiples sistemas de disco[15]
  • 1.2, 02 de enero de 2013, añaden clustering a través de nodos virtuales, comunicación entre nodos, procesos "batch" atómicos y traza de solicitudes[16]
  • 2.0, 04 de setiembre de 2013, añaden transacciones livianas (basadas en el protocolo Paxos), triggers, y compactaciones improvisadas.
  • 2.0.4, 30 de diciembre de 2013, añaden la especificación de los centros de datos para participar en una reparación, soporte de encriptación del cliente para el "sstableloader" y remover snapshots que no existen más.[17]
  • 2.1.0 10 de setiembre de 2014 [18]
  • 2.1.5 29 de abril de 2015 [19]

Características principales[editar]

Descentralizado
Todos los nodos del clúster tiene el mismo rol. No hay un único punto de fallo. Los datos se distribuyen a través del clúster (por lo que cada nodo contiene datos diferentes). No existe un nodo maestro por lo que cada nodo puede dar servicio a cualquier solicitud.
Soporta replicación y replicación de multiples data center
Las estrategias de replicación son configurables [20] . Cassandra está diseñado como un sistema distribuido, para el despliegue de un gran número de nodos a través de múltiples centros de datos. La arquitectura distribuida de Cassandra esta diseñado para desplegarse sobre multiples data center, tener redundancia y recuperarse ante desastres.
Escalabilidad
El rendimiento de leer y escribir aumenta linealmente a medida que se añaden nuevos nodos. Se pueden agregar nuevos nodos sin necesidad de interrumpir la ejecución de la aplicación.
Tolerancia a fallos
Los datos se replican automáticamente a múltiples nodos para recuperarse frente a fallos. Cassandra soporta replicación a través de multiples datacenter. Se puede reemplazar nodos que presenten fallos sin tiempo de inactividad o interrupción de la aplicación.
Consistencia
Se ofrece la elección de el nivel de consistencia para las lecturas y escrituras.
Soporte MapReduce
Cassandra esta integrado con Apache Hadoop para soportar MapReduce. Tambien existe soporte para Apache Pig y Apache Hive.[21]
Lenguaje de consulta
Cassandra introduce CQL (Cassandra Query Language), una alternativa similar a SQL para la interfaz RPC tradicional. Existen drivers disponibles para Java (JDBC), Python (DBAPI2), Node.JS (Helenus), Go (gocql) and C++.[22]


Modelo de Datos[editar]

Cassandra es esencialmente un hibrido entre un modelo Clave-Valor y una base de datos Tabular (Orientado a columnas).

La familia de columnas (llamada “Tabla” desde CQL3) se asemeja a una tabla en un RDBMS. Estas contienen filas y columnas. Cada fila tiene múltiples columnas, cada una de estas tiene a su vez un nombre, un valor y un timestamp. A diferencia de una tabla en un RDBMS, diferentes filas en una misma familia de columnas, no tiene por que compartir el mismo conjunto de columnas, y además, una columna puede ser añadida a una o a múltiples filas en cualquier momento. Cada clave en Cassandra, corresponde a un valor que es a su vez un objeto. Cada clave tiene valores como columnas, y las columnas son agrupadas en sets que son llamados familias de columnas. Así, cada clave identifica una fila con un número variable de elementos. Estas familias de columnas, pueden ser consideradas como tablas. Una tabla en Cassandra es un mapa multi-dimensional distribuido, indexado por una clave. Además, las aplicaciones pueden especificar el orden de las columnas dentro de una Súper Columna, o una Familia de Columnas Simples.

Clustering[editar]

Cuando se diseña el clúster para Apache Cassandra, un punto importante es seleccionar la partición correcta. Existen dos tipos de partición:

  • 1. Partición Randómica (RP): Esta partición distribuye los pares Clave-Valor de una forma randómica sobre la red, resultando en un buen balanceo de la carga. Si lo comparamos con OPP, en este modelo (RP) se debe accede a más nodos para obtener un número de claves.
  • 2. Partición Preservar el Orden (OPP): Este tipo de partición distribuye las tuplas Clave-Valor en una forma natural, donde las claves similares no se separan demasiado. La ventaja es que solo se debe accede a unos pocos nodos. La desventaja es la distribución irregular de claves-valor en los distintos nodos.

Licenciamiento y Soporte[editar]

Apache Cassandra es un proyecto de Apache Software Foundation, por lo que tiene una Apache License (version 2.0).

Usuarios Conocidos[editar]

  • WalmartLabs[23] (anteriormente Kosmix) usa Cassandra con SSD
  • Apple usa 75,000 nodos de Cassandra, como se reveló en el Cassandra Summit San Francisco 2014.[24]
  • AppScale usa Cassandra como back-end para aplicaciones de Google App Engine[25]
  • CERN usa un prototipo basado en Cassandra para el experimento ATL AS para archivar su sistema de monitoreo on line.[26]
  • Cisco WebEx usa Cassandra para almacenar la retroalimentación y actividades de los usuarios en tiempo real.[27]
  • Cloudkick usa Cassandra para almacenar metricas de los servidores de sus usuarios.[28]
  • Constant Contact usa Cassandra en sus aplicaciones de email y redes sociales.[29]
  • Digg, un gran sitio web de noticias, anunció el 9 de setiembre de 2009 que empezó a usar Cassandra[30]
  • Facebook usa Cassandra para su sistema de búsquedas en la bandeja de entrada, con una implemetanción de más de 200 nodos.[31]
  • Formspring usa Cassandra para contar respuestas, asi como para almacenar datos como seguidores, usuarios bloqueados, etc.[32]
  • IBM realizó investigaciones para desarollar un sistema de email basado en Cassandra.[33]
  • Mahalo.com usa Cassandra para guardar la actividad de sus usuarios y temas para su sitio Q&A[34] [35]
  • Netflix usa Cassandra como base de datos de back-end para su servicio de streaming[36] [37]
  • Nutanix usa Cassandra para almacenar metadatos y estadísticas. [38]
  • Openwave usa Cassandra como base de datos distribuida y como mecanismo de almacenamiento para si plataforma de mensajes de próxima generación[39]
  • OpenX tiene más de 130 nodos de Cassandra para OpenX Enterprise, donde almacena y replica anuncios y datos para propaganda[40]
  • PostRank usa Cassandra como base de datos de backend[41]
  • Rackspace usa Cassandra internamente.[42]
  • Reddit se cambió a Cassandra de memcacheDB el 12 de marzo de 2010[43] y experimentó algunos problemas en mayo por comenzar con pocos nodos.[44]
  • RockYou usa Cassandra para grabar cada canción[45]
  • SoundCloud usa Cassandra para almacenar el dashboard de sus usuarios[46]
  • Talentica Software usa Cassandra como back-end para hacer análisis de datos, con más de 30 nodos insertando alrededor de 200GB de datos diariamente.[47]
  • Twitter anunció que esta planificando cambiar MySQL por Cassandra[48] [49]
  • Urban Airship usa Cassandra con el servicio de almacenamiento movie, con más de 160 milliones de aplicaciones instaladas en más de 80 millones de dispositivos[50]
  • Wikimedia usa Cassandra como base de datos de backend.[51]
  • Zoho usa Cassandra para una pre-visualización de su bandeja de entrada de Zoho Mail.

Facebook cambió su desarrollo de la versión preliminar de Apache Cassandra a finales de 2010, cuando reemplazaron la búsqueda en la bandeja de entrada por su plataforma de mensajería. En 2012, Facebook comenzó a usar Apache Cassandra en Instagram.[52]

Ver También[editar]

Uso Académico[editar]

Alternativas Populares[editar]

Otras Alternativas[editar]

Alternativas Comerciales[editar]

References[editar]

  1. Casares, Joaquin (2012-11-05). «Multi-datacenter Replication in Cassandra». DataStax. Consultado el 2013-07-25. «Cassandra’s innate datacenter concepts are important as they allow multiple workloads to be run across multiple datacenters…». 
  2. Rabl, Tilmann; Sadoghi, Mohammad; Jacobsen, Hans-Arno; Villamor, Sergio Gomez-; Mulero -, Victor Muntes; Mankovskii, Serge (2012-08-27). «Solving Big Data Challenges for Enterprise Application Performance Management». VLDB. Consultado el 2013-07-25. «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... this comes at the price of high write and read latencies». 
  3. DataStax (2013-01-15). «About data consistency». Consultado el 2013-07-25. 
  4. Ellis, Jonathan (2012-02-15). «Schema in Cassandra 1.1». DataStax. Consultado el 2013-07-25. 
  5. Ellis, Jonathan (2010-12-03). «What’s new in Cassandra 0.7: Secondary indexes». DataStax. Consultado el 2013-07-25. 
  6. Ellis, Jonathan (2012-03-02). «The Schema Management Renaissance in Cassandra 1.1». DataStax. Consultado el 2013-07-25. 
  7. Lebresne, Sylvain (2012-08-05). «Coming in 1.2: Collections support in CQL3». DataStax. Consultado el 2013-07-25. 
  8. Hamilton, James (July 12, 2008). «Facebook Releases Cassandra as Open Source». Consultado el 2009-06-04. 
  9. «Is this the new hotness now?». Mail-archive.com. 2009-03-02. Archivado desde el original el 25 April 2010. Consultado el 2010-03-29. 
  10. «Cassandra is an Apache top level project». Mail-archive.com. 2010-02-18. Archivado desde el original el 28 March 2010. Consultado el 2010-03-29. 
  11. The Apache Software Foundation Announces Apache Cassandra Release 0.6 : The Apache Software Foundation Blog
  12. The Apache Software Foundation Announces Apache Cassandra 0.7 : The Apache Software Foundation Blog
  13. [Cassandra-user] [RELEASE] 0.8.0 - Grokbase
  14. Cassandra 1.0.0. Is Ready for the Enterprise
  15. The Apache Software Foundation Announces Apache Cassandra™ v1.1 : The Apache Software Foundation Blog
  16. «The Apache Software Foundation Announces Apache Cassandra™ v1.2 : The Apache Software Foundation Blog». apache.org. Consultado el 11 December 2014. 
  17. Eric Evans. «[Cassandra-User] [RELEASE] Apache Cassandra 2.0.4». qnalist.com. Consultado el 11 December 2014. 
  18. Sylvain Lebresne (10 September 2014). «[VOTE SUCCESS] Release Apache Cassandra 2.1.0». mail-archive.com. Consultado el 11 December 2014. 
  19. «Release Apache Cassandra 2.5.5». Consultado el 7 June 2015. 
  20. «Deploying Cassandra across Multiple Data Centers». DataStax. Consultado el 11 December 2014. 
  21. "Hadoop Support" article on Cassandra's wiki
  22. «DataStax C/C++ Driver for Apache Cassandra». DataStax. Consultado el 15 December 2014. 
  23. «WalmartLabs». walmartlabs.com. Consultado el 11 December 2014. 
  24. «Datastores on Appscale». 
  25. «A Persistent Back-End for the ATLAS Online Information Service (P-BEAST)». 
  26. «Re: Cassandra users survey». Mail-archive.com. 2009-11-21. Archivado desde el original el 17 April 2010. Consultado el 2010-03-29. 
  27. 4 Months with Cassandra, a love story |Cloudkick, manage servers better
  28. Finley, Klint (2011-02-18). «This Week in Consolidation: HP Buys Vertica, Constant Contact Buys Bantam Live and More». Read Write Enterprise. 
  29. Eure, Ian. «Looking to the future with Cassandra». 
  30. «Net compatibele browser». Facebook. Consultado el 2010-03-29. 
  31. Cozzi, Martin (2011-08-31). «Cassandra at Formspring». 
  32. «BlueRunner: Building an Email Service in the Cloud». ieee.org. 2009-07-20. Consultado el 2010-03-29. 
  33. «Mahalo.com powered by Apache Cassandra™». DataStax.com. Santa Clara, CA, USA: DataStax. 2012-04-10. Consultado el 2014-06-13. 
  34. Watch Cassandra at Mahalo.com |DataStax Episodes |Blip
  35. Cockcroft, Adrian (2011-07-11). «Migrating Netflix from Datacenter Oracle to Global Cassandra». slideshare.net. Consultado el 2014-06-13. 
  36. Izrailevsky, Yury (2011-01-28). «NoSQL at Netflix». 
  37. «Nutanix Bible». 
  38. Mainstay LLC (2013-11-11). «DataStax Case Study of Openwave Messaging». DataStax.com. Santa Clara, CA, USA: DataStax. Consultado el 2014-06-15. 
  39. Ad Serving Technology - Advanced Optimization, Forecasting, & Targeting |OpenX
  40. Grigorik, Ilya (2011-03-29). «Webpulp TV: Scaling PostRank with Ilya Grigorik». 
  41. «Hadoop and Cassandra (at Rackspace)». Stu Hood. 2010-04-23. Consultado el 2011-09-01. 
  42. david [ketralnis] (2010-03-12). «what's new on reddit: She who entangles men». blog.reddit. Archivado desde el original el 25 March 2010. Consultado el 2010-03-29. 
  43. Posted by the reddit admins at (2010-05-11). «blog.reddit -- what's new on reddit: reddit's May 2010 "State of the Servers" report». blog.reddit. Archivado desde el original el 14 May 2010. Consultado el 2010-05-16. 
  44. Pattishall, Dathan Vance (2011-03-23). «Cassandra is my NoSQL Solution but». 
  45. «Cassandra at SoundCloud». 
  46. cite web|url=http://www.talentica.com
  47. Popescu, Alex. «Cassandra Twitter: An Interview with Ryan King». myNoSQL. Archivado desde el original el 1 March 2010. Consultado el 2010-03-29. 
  48. Babcock, Charles. «Twitter Drops MySQL For Cassandra - Cloud databases». InformationWeek. Archivado desde el original el 2 April 2010. Consultado el 2010-03-29. 
  49. Onnen, Erik. «From 100s to 100s of Millions». 
  50. Wicke, Gabriel. «Wikimedia REST content API is now available in beta». 
  51. Rick Branson (2013-06-26). «Cassandra at Instagram». DataStax. Consultado el 2013-07-25. 

Bibliografía[editar]

Enlaces externos[editar]