Introducción
Apache Cassandra es una base de datos NoSQL de alto rendimiento, escalable y tolerante a fallos, diseñada para procesar enormes volúmenes de datos con latencias mínimas. Es utilizada por empresas como Netflix, Apple, eBay e Instagram para manejar petabytes de datos en tiempo real.
Para Python existe el controlador oficial cassandra-driver, que brinda acceso completo a las capacidades de Cassandra desde programas Python. Soporta consultas síncronas y asíncronas, sentencias preparadas, manejo de UUID, TTL y mucho más.
¿Qué es cassandra-driver?
Cassandra-driver es el cliente oficial de Python para Apache Cassandra, desarrollado por el equipo de DataStax. Es un controlador de alto rendimiento que garantiza una integración completa entre aplicaciones Python y un clúster de Cassandra.
Características principales del controlador
- Operaciones síncronas y asíncronas
- Consultas preparadas para mejorar el rendimiento
- Enrutamiento automático de consultas a los nodos óptimos
- Soporte para todos los tipos de datos de Cassandra
- Manejo integrado de errores y reintentos
- Soporte para autenticación y cifrado SSL
- Balanceo de carga entre nodos del clúster
Instalación y configuración
Instalación del controlador
pip install cassandra-driver
Para algunas funciones pueden ser necesarias dependencias adicionales:
pip install cassandra-driver[cqlengine] # para ORM
pip install cassandra-driver[graph] # para trabajar con grafos
Conexión al clúster
from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider
# Conexión simple
cluster = Cluster(['127.0.0.1'])
session = cluster.connect()
# Conexión con autenticación
auth_provider = PlainTextAuthProvider(username='cassandra', password='cassandra')
cluster = Cluster(['127.0.0.1'], auth_provider=auth_provider)
session = cluster.connect()
# Conexión con SSL
from cassandra.cluster import Cluster
from ssl import PROTOCOL_TLSv1_2, CERT_REQUIRED
cluster = Cluster(['127.0.0.1'],
ssl_context={
'ssl_version': PROTOCOL_TLSv1_2,
'cert_reqs': CERT_REQUIRED,
'ca_certs': '/ruta/al/ca.pem'
})
session = cluster.connect()
Conexión a un keyspace específico
session.set_keyspace('mi_keyspace')
# o
session = cluster.connect('mi_keyspace')
Conceptos clave de Cassandra
Arquitectura de datos
- Keyspace — análogo a una base de datos en SQL, contiene configuraciones de replicación
- Tabla — contiene filas y columnas, pero con una estructura interna diferente
- Partition key — determina en qué nodo se almacena el registro
- Clustering key — afecta el orden de almacenamiento dentro de la partición
- Primary key — compuesta por partition key y clustering key
Particularidades del modelo de datos
Cassandra no soporta JOIN ni agregaciones como en SQL, pero escala horizontalmente y garantiza alta disponibilidad de los datos. El diseño del esquema debe basarse en los patrones de acceso a los datos.
Creación de Keyspace y tablas
Creación de Keyspace
session.execute("""
CREATE KEYSPACE IF NOT EXISTS mi_keyspace
WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': '3'
}
""")
# Para producción se recomienda NetworkTopologyStrategy
session.execute("""
CREATE KEYSPACE IF NOT EXISTS mi_keyspace
WITH replication = {