创建键空间 #
一、键空间概述 #
1.1 什么是键空间 #
键空间(Keyspace)是ScyllaDB中最顶层的命名空间,类似于关系数据库中的数据库概念。
text
层级结构:
┌─────────────────────────────────────────────────────────┐
│ │
│ Cluster (集群) │
│ └── Keyspace (键空间) │
│ └── Table (表) │
│ └── Partition (分区) │
│ └── Row (行) │
│ │
└─────────────────────────────────────────────────────────┘
1.2 键空间属性 #
| 属性 | 说明 |
|---|---|
| 名称 | 键空间唯一标识 |
| 复制策略 | 数据复制方式 |
| 复制因子 | 副本数量 |
| 持久化写入 | 是否启用提交日志 |
二、基本语法 #
2.1 CREATE KEYSPACE语法 #
sql
CREATE KEYSPACE [IF NOT EXISTS] keyspace_name
WITH replication = {
'class': 'replication_strategy',
...
}
[AND durable_writes = true|false];
2.2 简单示例 #
sql
-- 最简单的创建方式
CREATE KEYSPACE my_keyspace
WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 1
};
-- 使用IF NOT EXISTS避免错误
CREATE KEYSPACE IF NOT EXISTS my_keyspace
WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 3
};
三、复制策略配置 #
3.1 SimpleStrategy #
适用于单数据中心开发测试环境。
sql
-- SimpleStrategy配置
CREATE KEYSPACE dev_keyspace
WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 3
};
-- 复制因子说明:
-- RF=1: 每条数据存储1份
-- RF=3: 每条数据存储3份(推荐)
-- RF=5: 每条数据存储5份
3.2 NetworkTopologyStrategy #
适用于生产环境,支持多数据中心。
sql
-- 单数据中心
CREATE KEYSPACE production_keyspace
WITH replication = {
'class': 'NetworkTopologyStrategy',
'datacenter1': 3
};
-- 多数据中心
CREATE KEYSPACE global_keyspace
WITH replication = {
'class': 'NetworkTopologyStrategy',
'dc1': 3,
'dc2': 3,
'dc3': 2
};
-- 不同数据中心不同复制因子
CREATE KEYSPACE hybrid_keyspace
WITH replication = {
'class': 'NetworkTopologyStrategy',
'primary_dc': 5,
'secondary_dc': 3,
'backup_dc': 2
};
3.3 查看数据中心名称 #
bash
# 使用nodetool查看数据中心
nodetool status
# 输出示例
Datacenter: datacenter1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 192.168.1.1 100 GB 256 33.3% uuid1 rack1
四、完整配置示例 #
4.1 开发环境配置 #
sql
-- 开发环境:简单配置
CREATE KEYSPACE dev_app
WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 1
}
AND durable_writes = true;
4.2 测试环境配置 #
sql
-- 测试环境:中等配置
CREATE KEYSPACE test_app
WITH replication = {
'class': 'NetworkTopologyStrategy',
'datacenter1': 2
}
AND durable_writes = true;
4.3 生产环境配置 #
sql
-- 生产环境:完整配置
CREATE KEYSPACE production_app
WITH replication = {
'class': 'NetworkTopologyStrategy',
'dc1': 3,
'dc2': 3
}
AND durable_writes = true;
4.4 高可用配置 #
sql
-- 高可用:跨数据中心
CREATE KEYSPACE ha_app
WITH replication = {
'class': 'NetworkTopologyStrategy',
'us-east': 3,
'us-west': 3,
'eu-west': 3
}
AND durable_writes = true;
五、持久化写入 #
5.1 durable_writes说明 #
sql
-- 启用持久化写入(默认)
CREATE KEYSPACE durable_ks
WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 3
}
AND durable_writes = true;
-- 禁用持久化写入(不推荐)
CREATE KEYSPACE non_durable_ks
WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 3
}
AND durable_writes = false;
5.2 持久化写入影响 #
| 设置 | 说明 | 适用场景 |
|---|---|---|
| true | 写入提交日志,数据安全 | 生产环境 |
| false | 不写入提交日志,性能高 | 临时数据 |
六、使用键空间 #
6.1 切换键空间 #
sql
-- 切换到指定键空间
USE my_keyspace;
-- 后续操作默认在该键空间下
CREATE TABLE users (
user_id UUID PRIMARY KEY,
name TEXT
);
6.2 完全限定名 #
sql
-- 使用完全限定名访问表
SELECT * FROM my_keyspace.users;
-- 插入数据
INSERT INTO my_keyspace.users (user_id, name)
VALUES (uuid(), '张三');
七、查看键空间信息 #
7.1 查看所有键空间 #
sql
-- 列出所有键空间
DESCRIBE KEYSPACES;
-- 或使用系统表
SELECT keyspace_name
FROM system_schema.keyspaces;
7.2 查看键空间详情 #
sql
-- 查看特定键空间
DESCRIBE KEYSPACE my_keyspace;
-- 查看键空间配置
SELECT * FROM system_schema.keyspaces
WHERE keyspace_name = 'my_keyspace';
7.3 查看键空间中的表 #
sql
-- 列出键空间中的所有表
DESCRIBE TABLES IN my_keyspace;
-- 使用系统表查询
SELECT table_name
FROM system_schema.tables
WHERE keyspace_name = 'my_keyspace';
八、键空间命名规范 #
8.1 命名规则 #
text
命名规则:
├── 只包含字母、数字、下划线
├── 以字母开头
├── 不区分大小写
├── 最大长度48字符
└── 不能使用保留字
8.2 命名示例 #
sql
-- 好的命名
CREATE KEYSPACE user_data ...
CREATE KEYSPACE order_service ...
CREATE KEYSPACE analytics_db ...
-- 不好的命名
CREATE KEYSPACE 123data ... -- 数字开头
CREATE KEYSPACE my-data ... -- 包含连字符
CREATE KEYSPACE "MyKeyspace" ... -- 使用引号(区分大小写)
九、常见错误处理 #
9.1 键空间已存在 #
sql
-- 错误:键空间已存在
CREATE KEYSPACE my_keyspace ...;
-- Error: Keyspace 'my_keyspace' already exists
-- 解决:使用IF NOT EXISTS
CREATE KEYSPACE IF NOT EXISTS my_keyspace ...;
9.2 无效的复制策略 #
sql
-- 错误:无效的复制策略
CREATE KEYSPACE bad_ks
WITH replication = {
'class': 'InvalidStrategy'
};
-- Error: Unknown replication strategy
-- 解决:使用有效策略
CREATE KEYSPACE good_ks
WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 3
};
9.3 数据中心名称错误 #
sql
-- 错误:数据中心名称不存在
CREATE KEYSPACE bad_dc
WITH replication = {
'class': 'NetworkTopologyStrategy',
'nonexistent_dc': 3
};
-- 解决:使用正确的数据中心名称
-- 先查看数据中心名称
-- nodetool status
CREATE KEYSPACE good_dc
WITH replication = {
'class': 'NetworkTopologyStrategy',
'datacenter1': 3
};
十、最佳实践 #
10.1 配置建议 #
| 环境 | 复制策略 | RF | durable_writes |
|---|---|---|---|
| 开发 | SimpleStrategy | 1 | true |
| 测试 | NetworkTopologyStrategy | 2 | true |
| 生产 | NetworkTopologyStrategy | 3 | true |
10.2 命名建议 #
text
命名建议:
├── 使用有意义的名称
├── 体现业务领域
├── 保持一致性
└── 避免使用系统保留字
示例:
├── user_service
├── order_management
├── analytics_platform
└── log_storage
十一、总结 #
创建键空间要点:
| 要点 | 说明 |
|---|---|
| 复制策略 | 生产使用NetworkTopologyStrategy |
| 复制因子 | 推荐3 |
| 持久化 | 生产环境必须启用 |
| 命名 | 有意义、规范 |
最佳实践:
- 生产环境使用NetworkTopologyStrategy
- 合理设置复制因子
- 启用持久化写入
- 使用有意义的命名
- 使用IF NOT EXISTS避免错误
下一步,让我们学习修改键空间!
最后更新:2026-03-27