跳到主要内容

Cassandra 数据类型

Cassandra 是一个高度可扩展的分布式 NoSQL 数据库,广泛用于处理大规模数据。为了有效地存储和查询数据,Cassandra 提供了多种数据类型。本文将详细介绍 Cassandra 支持的数据类型,并通过实际案例展示它们的应用。

介绍

在 Cassandra 中,数据类型用于定义表中列的类型。Cassandra 支持多种数据类型,包括基本类型、集合类型和用户定义类型。理解这些数据类型对于设计高效的 Cassandra 数据模型至关重要。

基本数据类型

Cassandra 提供了一系列基本数据类型,用于存储常见的数据值。以下是一些常用的基本数据类型:

  • text: 用于存储 UTF-8 编码的字符串。
  • int: 用于存储 32 位整数。
  • bigint: 用于存储 64 位整数。
  • float: 用于存储 32 位浮点数。
  • double: 用于存储 64 位浮点数。
  • boolean: 用于存储布尔值(truefalse)。
  • uuid: 用于存储通用唯一标识符(UUID)。
  • timestamp: 用于存储日期和时间。

示例

以下是一个使用基本数据类型的表定义示例:

sql
CREATE TABLE users (
user_id uuid PRIMARY KEY,
username text,
age int,
is_active boolean,
created_at timestamp
);

在这个示例中,user_id 是主键,类型为 uuidusernametext 类型,ageint 类型,is_activeboolean 类型,created_attimestamp 类型。

集合数据类型

Cassandra 支持集合数据类型,用于存储多个值的集合。集合类型包括:

  • list: 用于存储有序的元素列表。
  • set: 用于存储唯一的元素集合。
  • map: 用于存储键值对。

示例

以下是一个使用集合数据类型的表定义示例:

sql
CREATE TABLE user_preferences (
user_id uuid PRIMARY KEY,
favorite_colors set<text>,
recent_activities list<text>,
settings map<text, text>
);

在这个示例中,favorite_colors 是一个 set<text> 类型,用于存储用户喜欢的颜色集合;recent_activities 是一个 list<text> 类型,用于存储用户最近的活动列表;settings 是一个 map<text, text> 类型,用于存储用户的设置键值对。

用户定义类型(UDT)

Cassandra 允许用户定义自己的数据类型(UDT),以便更好地组织复杂的数据结构。UDT 可以包含多个字段,每个字段都有自己的数据类型。

示例

以下是一个用户定义类型的创建和使用示例:

sql
CREATE TYPE address (
street text,
city text,
state text,
zip_code text
);

CREATE TABLE users (
user_id uuid PRIMARY KEY,
username text,
address frozen<address>
);

在这个示例中,我们首先定义了一个 address 类型,包含 streetcitystatezip_code 字段。然后,我们在 users 表中使用 frozen<address> 类型来存储用户的地址信息。

实际应用场景

场景 1:存储用户信息

假设我们需要存储用户的基本信息和他们的偏好设置。我们可以使用以下表结构:

sql
CREATE TABLE users (
user_id uuid PRIMARY KEY,
username text,
age int,
is_active boolean,
created_at timestamp,
favorite_colors set<text>,
recent_activities list<text>,
settings map<text, text>
);

在这个表中,favorite_colors 用于存储用户喜欢的颜色集合,recent_activities 用于存储用户最近的活动列表,settings 用于存储用户的设置键值对。

场景 2:存储订单信息

假设我们需要存储订单信息,包括订单号、客户信息和订单项。我们可以使用以下表结构:

sql
CREATE TYPE order_item (
product_id uuid,
product_name text,
quantity int,
price double
);

CREATE TABLE orders (
order_id uuid PRIMARY KEY,
customer_id uuid,
items list<frozen<order_item>>,
order_date timestamp
);

在这个表中,我们定义了一个 order_item 类型,用于存储每个订单项的信息。然后,我们在 orders 表中使用 list<frozen<order_item>> 类型来存储订单项列表。

总结

Cassandra 提供了丰富的数据类型,包括基本类型、集合类型和用户定义类型,以满足不同场景下的数据存储需求。通过合理使用这些数据类型,可以设计出高效且灵活的 Cassandra 数据模型。

附加资源

练习

  1. 创建一个包含用户信息和地址信息的表,使用用户定义类型 address
  2. 设计一个表结构,用于存储博客文章及其标签集合。
  3. 尝试使用 map 类型存储用户的配置信息,并编写查询语句来检索特定配置项的值。

通过完成这些练习,您将更好地理解 Cassandra 数据类型的使用方法。