创建键空间 #

一、键空间概述 #

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 <= 节点数
-- 或者增加节点

十、总结 #

创建键空间要点:

  1. 复制策略:生产环境使用NetworkTopologyStrategy
  2. 复制因子:生产环境推荐RF=3
  3. 命名规范:小写、下划线分隔
  4. IF NOT EXISTS:避免重复创建错误
  5. 验证配置:创建后检查复制配置
  6. 资源规划:根据实际需求设置RF

下一步,让我们学习修改键空间!

最后更新:2026-03-27