5. Cassandra
什么是 Cassandra?
Apache Cassandra 是一个分布式 NoSQL 数据库,适用于高可用性和水平扩展的场景,广泛用于大数据存储。
info
Cassandra 采用去中心化架构,支持高吞吐量和无单点故障的分布式存储。
Cassandra 数据结构
Cassandra 采用 键空间(Keyspace) 作为数据库的最顶层单位,表(Table) 作为存储单元,行(Row) 作为数据项。
CREATE KEYSPACE my_keyspace WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
USE my_keyspace;
CREATE TABLE users (
id UUID PRIMARY KEY,
name TEXT,
age INT,
email TEXT
);
Cassandra 基本操作
- CQL(Cassandra Query Language)
- Python
-- 插入数据
INSERT INTO users (id, name, age, email) VALUES (uuid(), 'Alice', 30, 'alice@example.com');
-- 查询数据
SELECT * FROM users WHERE age > 25;
-- 更新数据
UPDATE users SET age = 31 WHERE id = 1234abcd-56ef-78gh-90ij-klmnopqrstuv;
-- 删除数据
DELETE FROM users WHERE id = 1234abcd-56ef-78gh-90ij-klmnopqrstuv;
from cassandra.cluster import Cluster
cluster = Cluster(["127.0.0.1"])
session = cluster.connect("my_keyspace")
# 插入数据
session.execute("""
INSERT INTO users (id, name, age, email)
VALUES (uuid(), 'Alice', 30, 'alice@example.com')
""")
# 查询数据
rows = session.execute("SELECT * FROM users WHERE age > 25")
for row in rows:
print(row.name, row.age, row.email)
索引与优化
-- 创建索引,提高查询效率
CREATE INDEX ON users (email);
-- 使用批量插入,提高写入性能
BEGIN BATCH
INSERT INTO users (id, name, age, email) VALUES (uuid(), 'Bob', 25, 'bob@example.com');
INSERT INTO users (id, name, age, email) VALUES (uuid(), 'Charlie', 28, 'charlie@example.com');
APPLY BATCH;
事务管理与一致性
使用 Lightweight Transactions (LWT) 保证一致性
-- 确保只有在 email 不存在的情况下才插入数据
INSERT INTO users (id, name, age, email) VALUES (uuid(), 'David', 27, 'david@example.com')
IF NOT EXISTS;
结论
Cassandra 是一个强大的分布式数据库,适用于大规模数据存储和高吞吐量应用。通过使用 CQL 和适当的优化策略,可以提升数据管理效率。