创建键空间 #
一、键空间概述 #
1.1 什么是键空间 #
键空间(Keyspace)是Cassandra中最顶层的命名空间,类似于关系数据库中的数据库(Database)。
text
Cassandra数据层级:
Cluster(集群)
└── Keyspace(键空间)- 类似数据库
└── Table(表)- 类似表
└── Partition(分区)
└── Row(行)
1.2 键空间属性 #
| 属性 | 描述 |
|---|---|
| 名称 | 键空间标识符 |
| 复制策略 | 数据复制方式 |
| 复制因子 | 副本数量 |
| 持久写入 | 是否写入提交日志 |
二、CREATE KEYSPACE语法 #
2.1 基本语法 #
sql
CREATE KEYSPACE [IF NOT EXISTS] keyspace_name
WITH replication = {
'class': 'replication_strategy',
'replication_factor': number
}
[AND durable_writes = true|false];
2.2 参数说明 #
| 参数 | 描述 |
|---|---|
| IF NOT EXISTS | 键空间不存在时才创建 |
| keyspace_name | 键空间名称 |
| replication | 复制策略配置 |
| durable_writes | 是否持久化写入 |
三、SimpleStrategy示例 #
3.1 基本创建 #
sql
-- 创建简单键空间
CREATE KEYSPACE my_app
WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 1
};
-- 使用IF NOT EXISTS避免错误
CREATE KEYSPACE IF NOT EXISTS my_app
WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 3
};
3.2 复制因子配置 #
sql
-- RF=1(单副本)
CREATE KEYSPACE dev_keyspace
WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 1
};
-- RF=2(双副本)
CREATE KEYSPACE test_keyspace
WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 2
};
-- RF=3(三副本)
CREATE KEYSPACE prod_keyspace
WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 3
};
四、NetworkTopologyStrategy示例 #
4.1 单数据中心 #
sql
-- 单数据中心
CREATE KEYSPACE my_app
WITH replication = {
'class': 'NetworkTopologyStrategy',
'datacenter1': 3
};
-- 指定数据中心名称
CREATE KEYSPACE my_app_prod
WITH replication = {
'class': 'NetworkTopologyStrategy',
'DC1': 3
};
4.2 多数据中心 #
sql
-- 双数据中心
CREATE KEYSPACE global_app
WITH replication = {
'class': 'NetworkTopologyStrategy',
'DC1': 3,
'DC2': 3
};
-- 多数据中心不同复制因子
CREATE KEYSPACE multi_dc_app
WITH replication = {
'class': 'NetworkTopologyStrategy',
'beijing': 3,
'shanghai': 2,
'guangzhou': 2
};
4.3 查看数据中心名称 #
bash
# 使用nodetool查看数据中心名称
nodetool status
# 输出示例
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 127.0.0.1 100 KB 16 100% xxx-xxx-xxx rack1
五、完整配置示例 #
5.1 开发环境 #
sql
-- 开发环境配置
CREATE KEYSPACE dev_app
WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 1
}
AND durable_writes = true;
5.2 测试环境 #
sql
-- 测试环境配置
CREATE KEYSPACE test_app
WITH replication = {
'class': 'NetworkTopologyStrategy',
'datacenter1': 2
}
AND durable_writes = true;
5.3 生产环境 #
sql
-- 生产环境配置
CREATE KEYSPACE prod_app
WITH replication = {
'class': 'NetworkTopologyStrategy',
'DC1': 3,
'DC2': 3
}
AND durable_writes = true;
5.4 分析环境 #
sql
-- 分析环境(禁用持久写入以提高性能)
CREATE KEYSPACE analytics_app
WITH replication = {
'class': 'NetworkTopologyStrategy',
'analytics_dc': 2
}
AND durable_writes = false;
六、验证和管理 #
6.1 查看键空间 #
sql
-- 列出所有键空间
DESCRIBE KEYSPACES;
-- 查看特定键空间
DESCRIBE KEYSPACE my_app;
-- 查看键空间详细信息
SELECT * FROM system_schema.keyspaces
WHERE keyspace_name = 'my_app';
6.2 使用键空间 #
sql
-- 切换到键空间
USE my_app;
-- 在键空间中创建表
CREATE TABLE users (
user_id UUID PRIMARY KEY,
name TEXT,
email TEXT
);
6.3 检查复制配置 #
sql
-- 查看复制策略
SELECT keyspace_name, replication
FROM system_schema.keyspaces
WHERE keyspace_name = 'my_app';
-- 输出示例
keyspace_name | replication
---------------+--------------------------------------------------------------------------------
my_app | {'class': 'org.apache.cassandra.locator.NetworkTopologyStrategy', 'DC1': '3', 'DC2': '3'}
七、命名规范 #
7.1 命名规则 #
text
键空间命名规则:
1. 字符限制
✓ 字母(a-z, A-Z)
✓ 数字(0-9)
✓ 下划线(_)
✗ 连字符(-)
✗ 空格
2. 长度限制
✓ 建议:2-32字符
✗ 超过48字符
3. 大小写
✓ 推荐:全小写
✗ 混合大小写(需要引号)
7.2 命名示例 #
sql
-- 推荐命名
CREATE KEYSPACE user_service ...
CREATE KEYSPACE order_management ...
CREATE KEYSPACE product_catalog ...
-- 不推荐命名
CREATE KEYSPACE "UserService" ... -- 大小写混合
CREATE KEYSPACE user-service ... -- 包含连字符
CREATE KEYSPACE "user service" ... -- 包含空格
八、最佳实践 #
8.1 复制策略选择 #
text
复制策略选择:
开发环境
├── SimpleStrategy
└── RF=1
测试环境
├── NetworkTopologyStrategy
└── RF=2
生产环境
├── NetworkTopologyStrategy
└── RF=3(每个数据中心)
多数据中心
├── NetworkTopologyStrategy
└── 每DC=3
8.2 复制因子建议 #
| 环境 | RF | 原因 |
|---|---|---|
| 开发 | 1 | 节省资源 |
| 测试 | 2 | 测试容错 |
| 生产 | 3 | 平衡可用性和一致性 |
| 关键业务 | 5 | 更高容错 |
8.3 注意事项 #
text
创建键空间注意事项:
1. 复制策略不可更改
└── 创建后无法修改复制策略类型
2. 复制因子可调整
└── ALTER KEYSPACE可以修改RF
3. 数据中心名称必须正确
└── 使用nodetool status确认
4. 资源规划
└── RF越高,存储和性能开销越大
九、常见问题 #
9.1 创建失败 #
sql
-- 问题:键空间已存在
CREATE KEYSPACE my_app ...
-- 错误:AlreadyExists: Keyspace 'my_app' already exists
-- 解决:使用IF NOT EXISTS
CREATE KEYSPACE IF NOT EXISTS my_app ...
9.2 数据中心名称错误 #
sql
-- 问题:数据中心名称不匹配
CREATE KEYSPACE my_app
WITH replication = {
'class': 'NetworkTopologyStrategy',
'wrong_dc_name': 3
};
-- 可能成功但副本数为0
-- 解决:先确认数据中心名称
nodetool status
9.3 复制因子超过节点数 #
sql
-- 问题:RF > 节点数
CREATE KEYSPACE my_app
WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 5
};
-- 集群只有3个节点
-- 解决:RF <= 节点数
-- 或者增加节点
十、总结 #
创建键空间要点:
- 复制策略:生产环境使用NetworkTopologyStrategy
- 复制因子:生产环境推荐RF=3
- 命名规范:小写、下划线分隔
- IF NOT EXISTS:避免重复创建错误
- 验证配置:创建后检查复制配置
- 资源规划:根据实际需求设置RF
下一步,让我们学习修改键空间!
最后更新:2026-03-27