Cassandra-driver Python教程:Apache Cassandra数据库操作指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

简介

Apache Cassandra 是一款高性能、可扩展且高可用的NoSQL数据库,专为处理海量数据并保持极低延迟而设计。Netflix、Apple、eBay和Instagram等知名企业都在使用它实时处理PB级数据。

Python官方提供了cassandra-driver驱动程序,让Python程序能够全面访问Cassandra的各项功能。它支持同步和异步查询、预编译语句、UUID操作、TTL设置等丰富特性。

什么是cassandra-driver

Cassandra-driver是DataStax团队开发的Apache Cassandra官方Python客户端。这是一款高性能驱动程序,可实现Python应用程序与Cassandra集群之间的无缝集成。

驱动程序核心功能

  • 同步与异步操作
  • 预编译查询提升性能
  • 自动将查询路由到最优节点
  • 支持Cassandra所有数据类型
  • 内置错误处理与重试机制
  • 支持身份认证与SSL加密
  • 集群节点间的负载均衡

安装与配置

安装驱动程序

pip install cassandra-driver

某些高级功能需要额外安装依赖:

pip install cassandra-driver[cqlengine]  # 用于ORM
pip install cassandra-driver[graph]      # 用于图操作

连接集群

from cassandra.cluster import Cluster
from cassandra.auth import PlainTextAuthProvider

# 简单连接
cluster = Cluster(['127.0.0.1'])
session = cluster.connect()

# 带认证的连接
auth_provider = PlainTextAuthProvider(username='cassandra', password='cassandra')
cluster = Cluster(['127.0.0.1'], auth_provider=auth_provider)
session = cluster.connect()

# 带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': '/path/to/ca.pem'
                  })
session = cluster.connect()

连接指定Keyspace

session.set_keyspace('my_keyspace')
# 或
session = cluster.connect('my_keyspace')

Cassandra核心概念

数据架构

  • Keyspace — 类似SQL中的数据库,包含复制策略配置
  • 表 — 包含行和列,但内部存储结构不同
  • 分区键 — 决定数据存储在哪个节点
  • 聚类键 — 影响分区内数据的排序方式
  • 主键 — 由分区键和聚类键组成

数据模型特点

Cassandra不支持SQL中的JOIN和聚合操作,但具备水平扩展能力和高可用性。设计数据模型时应基于数据访问模式进行规划。

创建Keyspace和表

创建Keyspace

session.execute("""
    CREATE KEYSPACE IF NOT EXISTS my_keyspace
    WITH replication = {
        'class': 'SimpleStrategy',
        'replication_factor': '3'
    }
""")

# 生产环境推荐使用NetworkTopologyStrategy
session.execute("""
    CREATE KEYSPACE IF NOT EXISTS my_keyspace
    WITH replication = {                    

推荐