

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Keyspaces
<a name="cql.ddl.keyspace"></a>

*键空间* 对与一个或多个应用程序相关的表进行分组。就关系数据库管理系统 (RDBMS) 而言，键空间与数据库、表空间或类似的结构大致相似。

**注意**  
在 Apache Cassandra 中，键空间将决定如何在多个存储节点之间复制数据。但是，Amazon Keyspaces 是一项完全托管式服务：系统将为您管理其存储层的详细信息。因此，Amazon Keyspaces 中的键空间只是逻辑结构，并且与底层物理存储无关。

有关 Amazon Keyspaces 键空间的配额限制和约束的信息，请参阅 [Amazon Keyspaces（Apache Cassandra 兼容）限额](quotas.md)。

**Topics**
+ [CREATE KEYSPACE](#cql.ddl.keyspace.create)
+ [ALTER KEYSPACE](#cql.ddl.keyspace.alter)
+ [DROP KEYSPACE](#cql.ddl.keyspace.drop)
+ [USE](#cql.ddl.keyspace.use)

## CREATE KEYSPACE
<a name="cql.ddl.keyspace.create"></a>

使用 `CREATE KEYSPACE` 语句可创建新的键空间。

**语法**

```
create_keyspace_statement ::= 
    CREATE KEYSPACE [ IF NOT EXISTS ] keyspace_name
    WITH options
```

其中：
+ `keyspace_name` 是要创建的键空间的名称。
+ *选项* 为下列一个或多个项：
  + `REPLICATION`：表示键空间复制策略的映射：
    + `SingleRegionStrategy`：用于单区域键空间。（必需）
    + `NetworkTopologyStrategy`— 指定至少两个 AWS 区域。每个区域的复制因子为 3。（可选）
  + `DURABLE_WRITES`：由于对 Amazon Keyspaces 的写入操作始终是持久的，因此此选项不是必需的。但是，如果指定此选项，则值必须为 `true`。
  + `TAGS`：创建资源时要附加到资源的键值对标签的列表。（可选）

**示例**

创建键空间，如下所示。

```
CREATE KEYSPACE my_keyspace
    WITH REPLICATION = {'class': 'SingleRegionStrategy'} and TAGS ={'key1':'val1', 'key2':'val2'} ;
```

要创建多区域密钥空间，请指定`NetworkTopologyStrategy`并包含至少两个密钥空间。 AWS 区域每个区域的复制因子为 3。

```
CREATE KEYSPACE my_keyspace
    WITH REPLICATION = {'class':'NetworkTopologyStrategy', 'us-east-1':'3', 'ap-southeast-1':'3','eu-west-1':'3'};
```

## ALTER KEYSPACE
<a name="cql.ddl.keyspace.alter"></a>

您可以将该`ALTER KEYSPACE WITH`语句用于以下*选项*
+ `REPLICATION`— 使用此选项向密钥空间添加新的 AWS 区域 副本。您可以向单区域或多区域密钥空间添加新区域。
+ `TAGS`— 使用此选项在密钥空间中添加或删除标签。

**语法**

```
alter_keyspace_statement ::= 
    ALTER KEYSPACE keyspace_name
    WITH options
```

其中：
+ `keyspace_name` 是要更改的键空间的名称。
+ *选项*是以下选项之一：
  + `ADD | DROP TAGS`：要在键空间中添加或删除的键值对标签的列表。
  + `REPLICATION`— 表示密钥空间复制策略的地图；
    + `class`— `NetworkTopologyStrategy` 将密钥空间定义为多区域密钥空间。
    + `region`— AWS 区域 为此密钥空间再指定一个。每个区域的复制因子为 3。
    + `CLIENT_SIDE_TIMESTAMPS`— 默认值为`DISABLED`。您只能将状态更改为`ENABLED`。

**示例**

如以下示例所示更改密钥空间以添加标签。

```
ALTER KEYSPACE my_keyspace ADD TAGS {'key1':'val1', 'key2':'val2'};
```

要向多区域密钥空间添加第三个区域，可以使用以下语句。

```
ALTER KEYSPACE my_keyspace
WITH REPLICATION = {
    'class': 'NetworkTopologyStrategy',
    'us-east-1': '3',
    'us-west-2': '3',
    'us-west-1': '3'
} AND CLIENT_SIDE_TIMESTAMPS = {'status': 'ENABLED'};
```

## DROP KEYSPACE
<a name="cql.ddl.keyspace.drop"></a>

使用 `DROP KEYSPACE` 语句可删除键空间，包括其所有内容（如表）。

**语法**

```
drop_keyspace_statement ::= 
    DROP KEYSPACE [ IF EXISTS ] keyspace_name
```

其中：
+ *keyspace\$1name* 是要删除的键空间的名称。

**示例**

```
DROP KEYSPACE my_keyspace;
```

## USE
<a name="cql.ddl.keyspace.use"></a>

使用`USE`语句定义当前的密钥空间。这允许您引用绑定到特定密钥空间的对象，例如表和类型，而不必使用包含键空间前缀的完全限定名称。

**语法**

```
use_statement ::= 
    USE keyspace_name
```

其中：
+ *keyspace\$1nam* e 是要使用的密钥空间的名称。

**示例**

```
USE my_keyspace;
```