1. 概述

在本教程中,我们将展示 Apache Cassandra 数据库的一些不同数据类型。 Apache Cassandra支持丰富的数据类型,包括集合类型、本机类型、元组类型和用户定义类型

Cassandra 查询语言 (CQL) 是结构化查询语言 (SQL) 的简单替代方案。它是一种声明性语言,旨在提供与其数据库的通信。与 SQL 类似,CQL 也将数据存储在表中,并将数据组织成行和列。

2. Cassandra数据库配置

让我们使用docker 映像创建一个数据库,并使用 cqlsh 将其连接到数据库。接下来,我们应该创建一个 键空间:

CREATE KEYSPACE baeldung WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 1};

出于本教程的目的,我们创建了一个仅包含一份数据副本的 键空间 。现在,让我们将客户端会话连接到 密钥空间:

USE <code class="language-shell">baeldung;

3. 内置数据类型

CQL 支持丰富的本机数据类型。这些数据类型是预先定义的,我们可以直接引用其中的任何一个。

3.1.数字类型

数字类型与 Java 和其他语言中的标准类型类似,例如具有不同范围的整数或浮点数:

数字

让我们创建一个包含所有这些数据类型的表:

CREATE TABLE numeric_types
(
    type1 int PRIMARY KEY,
    type2 bigint,
    type3 smallint,
    type4 tinyint,
    type5 varint,
    type6 float,
    type7 double,
    type8 decimal
);

3.2.文本类型

CQL 提供两种数据类型来表示文本。 我们可以使用text或varchar来创建UTF-8字符串 。 UTF-8 是最新且广泛使用的文本标准,支持国际化。

还有 ascii 类型来创建 ASCII 字符串 。如果我们处理 ASCII 格式的遗留数据,ascii 类型最有用。文本值的大小受到列的最大大小的限制。单列值大小为 2 GB,但建议仅为 1 MB。

让我们创建一个包含所有这些数据类型的表:

CREATE TABLE text_types
(
    primaryKey int PRIMARY KEY,
    type2      text,
    type3      varchar,
    type4      ascii
);

3.3.日期类型

现在,我们来谈谈日期类型。 Cassandra 提供了几种类型,这些类型在定义唯一分区键或定义普通列时非常有用:

日期2

time did 由UUID version 1表示。我们可以向 CQL 时间戳、时间和日期输入整数或字符串。 持续时间类型的值被编码为 3 个有符号整数。

第一个整数表示月数,第二个整数表示天数,第三个整数表示纳秒数。

让我们看一个 创建表 命令的示例:

CREATE TABLE date_types
(
    primaryKey int PRIMARY KEY,
    type1      timestamp,
    type2      time,
    type3      date,
    type4      timeuuid,
    type5      duration
);

3.4.计数器类型

计数器类型用于定义 计数器列 计数器列是一个值为 64 位有符号整数的列。我们只能对计数器列执行两种操作——递增和递减。

因此,我们无法将值设置为计数器。我们可以使用计数器来跟踪统计信息,例如页面浏览量、推文、日志消息等。 我们不能将计数器类型与其他类型混合

让我们看一个例子:

CREATE TABLE counter_type
(
    primaryKey uuid PRIMARY KEY,
    type1      counter
);

3.5.其他数据类型

  • 布尔值是一个简单的真/假值
  • uuid 是 Type 4 UUID,完全基于随机数。我们可以使用破折号分隔的十六进制数字序列输入 UUID
  • 二进制大对象 (blob) 是任意字节数组的通俗计算术语。 CQL blob 类型存储媒体或其他二进制文件类型。最大 blob 大小为 2 GB,但建议小于 1 MB。
  • inet 是表示 IPv4IPv6 Internet 地址的类型

再次,让我们创建一个具有以下类型的表:

CREATE TABLE other_types
(
    primaryKey int PRIMARY KEY,
    type1      boolean,
    type2      uuid,
    type3      blob,
    type4      inet
);

4. 集合数据类型

有时我们希望存储相同类型的数据而不生成新列。集合可以存储多个值。 CQL 提供了三种集合类型来帮助我们,例如列表、集合和映射。

例如,我们可以创建一个包含文本元素列表、整数列表或某些其他元素类型列表的表。

4.1.放

我们可以使用 set 数据类型存储多个唯一值。 同样,在 Java*,* 中,元素也不是按顺序存储的。

让我们创建一个集合:

CREATE TABLE collection_types
(
    primaryKey int PRIMARY KEY,
    email      set<text>
);

4.2.列表

在此数据类型中,值以列表的形式存储。 我们无法改变元素的顺序。将值存储到列表中后,元素将获得特定的索引。我们可以使用这些索引来检索数据。

与集合不同,列表可以存储重复的值。让我们向表中添加一个列表:

ALTER TABLE collection_types
    ADD scores list<text>;

4.3.地图

使用 Cassandra**,我们可以使用映射数据类型**将数据存储在键值对集中。钥匙是独一无二的。因此,我们可以按地图的键对地图进行排序。

让我们在表中添加另一列:

ALTER TABLE collection_types
    ADD address map<uuid, text>;

5.元组

元组是一组不同类型的元素 。这些集合有固定的长度:

CREATE TABLE tuple_type
(
    primaryKey int PRIMARY KEY,
    type1 tuple<int, text, float>
);

6. 用户定义的数据类型

Cassandra 提供了创建我们自己的数据类型的可能性 。我们可以创建、修改和删除这些数据类型。首先,让我们创建自己的类型:

CREATE TYPE user_defined_type (
    type1 timestamp,
    type2 text,
    type3 text,
    type4 text);

所以,现在我们可以用我们的类型创建一个表:

CREATE TABLE user_type
(
    primaryKey int PRIMARY KEY,
    our_type   user_defined_type
);

七、结论

在本快速教程中,我们探索了基本的 CQL 数据类型。此外,我们还使用这些数据类型创建了表。之后,我们讨论了它们可以存储什么样的数据。

与往常一样,本文的完整源代码可以在 GitHub 上获取。