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 提供了几种类型,这些类型在定义唯一分区键或定义普通列时非常有用:
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 是表示 IPv4 或 IPv6 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 上获取。