Cassandra-driver – работа с Apache Cassandra

онлайн тренер по питону
Онлайн-тренажер Python 3 для начинающих

Теория без воды. Задачи с автоматической проверкой. Подсказки на русском языке. Работает в любом современном браузере.

начать бесплатно

Введение

Apache Cassandra — это высокопроизводительная, масштабируемая и отказоустойчивая NoSQL база данных, предназначенная для обработки огромных объёмов данных с минимальными задержками. Она используется такими компаниями, как Netflix, Apple, eBay и Instagram.

Для Python существует официальный драйвер — cassandra-driver, предоставляющий полный доступ к возможностям Cassandra через Python-программы. Он поддерживает синхронные и асинхронные запросы, подготовленные выражения, работу с UUID, TTL и многое другое.

Установка и подключение к кластеру

Установка драйвера

bash
pip install cassandra-driver

Подключение к кластеру

python
from cassandra.cluster import Cluster cluster = Cluster(['127.0.0.1']) # список узлов кластера session = cluster.connect()

Подключение к конкретному keyspace:

python
session.set_keyspace('my_keyspace')

Ключевые концепции Cassandra

  • Keyspace — аналог базы данных в SQL

  • Таблица — содержит строки и колонки, как в RDBMS, но с иным внутренним устройством

  • Partition key — определяет, на каком узле хранится запись

  • Clustering key — влияет на порядок хранения внутри партиции

Cassandra не поддерживает JOIN и агрегаты как в SQL, зато масштабируется горизонтально.

Создание Keyspace и таблиц

python
session.execute(""" CREATE KEYSPACE IF NOT EXISTS my_keyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} """) session.execute(""" CREATE TABLE IF NOT EXISTS users ( id UUID PRIMARY KEY, name TEXT, email TEXT ) """)

CRUD-операции в cassandra-driver

Вставка данных

python
import uuid session.execute( "INSERT INTO users (id, name, email) VALUES (%s, %s, %s)", (uuid.uuid4(), "Иван", "ivan@example.com") )

Чтение данных

python
rows = session.execute("SELECT * FROM users") for row in rows: print(row.name, row.email)

Обновление и удаление

python
session.execute("UPDATE users SET email=%s WHERE id=%s", ("new@example.com", user_id)) session.execute("DELETE FROM users WHERE id=%s", (user_id,))

Работа с асинхронными запросами

python
future = session.execute_async("SELECT * FROM users") rows = future.result()

Можно использовать callback:

python
def handle_results(results): for row in results: print(row.name) future.add_callbacks(callback=handle_results, errback=lambda x: print("Ошибка"))

Подготовленные запросы и безопасность

Подготовленные выражения:

python
prepared = session.prepare("INSERT INTO users (id, name, email) VALUES (?, ?, ?)") session.execute(prepared, (uuid.uuid4(), "Анна", "anna@example.com"))

Они повышают производительность и защищают от инъекций.

Масштабируемость и распределённость

Cassandra автоматически реплицирует данные между узлами, обеспечивая отказоустойчивость и масштабируемость. Партиционирование данных требует продуманного выбора partition key для равномерного распределения нагрузки.

Работа с TimeUUID и TTL

python
from cassandra.util import uuid1 session.execute( "INSERT INTO logs (id, event, created_at) VALUES (%s, %s, toTimestamp(now())) USING TTL 3600", (uuid1(), "user_login") )
  • TimeUUID сортируется по времени

  • TTL автоматически удаляет записи через заданный интервал

Обработка ошибок и отказоустойчивость

python
from cassandra import ReadTimeout try: session.execute("SELECT * FROM users") except ReadTimeout: print("Превышено время ожидания ответа от узлов")

Cassandra поддерживает настройку политик повторов (retry policies) и баланса нагрузки.

Интеграция с Django, Flask и FastAPI

  • В Django и Flask Cassandra может использоваться как внешняя NoSQL база

  • В FastAPI можно создать dependency с Cassandra session

  • Также Cassandra используется для хранения логов, аналитики, сообщений и временных данных

Тестирование с cassandra-driver

  • Используйте отдельный keyspace

  • Очистка таблиц после теста:

python
session.execute("TRUNCATE users")

Можно использовать Docker-образ Cassandra для изолированного тестирования.

Мониторинг и производительность

  • Используйте nodetool и Prometheus + Grafana для мониторинга

  • Профилируйте схемы и запросы, избегайте ALLOW FILTERING

  • Минимизируйте количество запросов, структурируя таблицы под сценарии использования

Сравнение с другими СУБД и хранилищами

Хранилище Тип Масштабирование Производительность Поддержка SQL
Cassandra NoSQL (Wide Column) Горизонтальное Очень высокая Нет (CQL)
PostgreSQL Реляционное Вертикальное Средняя Да
MongoDB Документное Горизонтальное Высокая Частично
Redis Ключ-значение Горизонтальное Очень высокая Нет

Часто задаваемые вопросы (FAQ)

1. Что такое cassandra-driver?
Это официальный Python-клиент для подключения и работы с Apache Cassandra.

2. Поддерживает ли Cassandra SQL?
Нет, используется язык CQL, похожий на SQL, но без JOIN, GROUP BY и других привычных конструкций.

3. Какие типы данных поддерживает Cassandra?
UUID, text, int, float, timestamp, set, list, map и другие.

4. Есть ли асинхронность в cassandra-driver?
Да, через метод execute_async() с callback.

5. Как реализовать TTL в Cassandra?
С помощью USING TTL при вставке данных.

6. Подходит ли Cassandra для аналитики?
Да, особенно для распределённой и временной аналитики, но без сложных агрегатов.

Полный справочник по работе с cassandra-driver — официальным Python-клиентом для Apache Cassandra

Установка

bash
pip install cassandra-driver

Подключение к кластеру

python
from cassandra.cluster import Cluster cluster = Cluster(['127.0.0.1']) session = cluster.connect()

Подключение к конкретной keyspace:

python
session.set_keyspace('mykeyspace')

Создание keyspace и таблиц

python
session.execute(""" CREATE KEYSPACE IF NOT EXISTS mykeyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1} """) session.execute(""" CREATE TABLE IF NOT EXISTS users ( id UUID PRIMARY KEY, name text, age int ) """)

Вставка данных

python
import uuid session.execute( "INSERT INTO users (id, name, age) VALUES (%s, %s, %s)", (uuid.uuid4(), "Alice", 30) )

Чтение данных

python
rows = session.execute("SELECT * FROM users") for row in rows: print(row.name, row.age)

Фильтрация:

python
row = session.execute("SELECT * FROM users WHERE name=%s", ("Alice",)).one()

Обновление и удаление

python
session.execute( "UPDATE users SET age = %s WHERE id = %s", (31, some_uuid) ) session.execute( "DELETE FROM users WHERE id = %s", (some_uuid,) )

Подготовленные запросы (prepared statements)

python
prepared = session.prepare("INSERT INTO users (id, name, age) VALUES (?, ?, ?)") bound = prepared.bind((uuid.uuid4(), "Bob", 28)) session.execute(bound)

Асинхронные запросы

python
future = session.execute_async("SELECT * FROM users") rows = future.result()

Работа с типами данных

Cassandra Python
text str
int int
uuid uuid.UUID
timestamp datetime.datetime
boolean bool
list<type> list
map<key, value> dict
set<type> set

Модели данных (Object Mapper)

Можно использовать cassandra.cqlengine, чтобы работать с объектами как в ORM.

bash
pip install cassandra-driver[cqlengine]
python
from cassandra.cqlengine.models import Model from cassandra.cqlengine import columns from cassandra.cqlengine.management import sync_table from cassandra.cqlengine.connection import setup setup(['127.0.0.1'], "mykeyspace") class User(Model): id = columns.UUID(primary_key=True) name = columns.Text() age = columns.Integer() sync_table(User) # Создание User.create(id=uuid.uuid4(), name="Eve", age=27) # Получение for user in User.objects(name="Eve"): print(user.age)

Индексация и запросы

python
session.execute(""" CREATE INDEX IF NOT EXISTS ON users (name) """)

Параметры подключения

python
Cluster( contact_points=["db1.example.com"], port=9042, protocol_version=4 )

Поддержка SSL, аутентификации и балансировки нагрузки также доступна.


Когда использовать Cassandra + cassandra-driver

  • Для распределённых систем с высокой нагрузкой.

  • Когда необходима отказоустойчивость и масштабируемость.

  • Для временных рядов, логирования, IoT и аналитики.

  • Когда NoSQL-модель данных подходит лучше реляционной.

Заключение

Cassandra-driver – работа с Apache Cassandra — это мощный инструмент для Python-разработчиков, которым важно обеспечить масштабируемость, отказоустойчивость и быструю обработку больших данных. Cassandra отлично подходит для проектов с интенсивной записью, временными логами, аналитикой и интернет вещей. Благодаря cassandra-driver интеграция с Python проста, надёжна и эффективна.