Cassandra 数据类型
1. 概述
在本教程中,我们将展示 Apache Cassandra 数据库的一些不同数据类型。Apache Cassandra 支持丰富的数据类型集,包括集合类型、本机类型、元组类型和用户定义类型。
Cassandra 查询语言 (CQL) 是结构化查询语言 (SQL) 的简单替代方案。它是一种声明性语言,旨在提供与其数据库的通信。与 SQL 类似,CQL 也将数据存储在表中,并将数据组织成行和列。
2. Cassandra 数据库配置
让我们使用 docker映像 创建一个数据库,并使用cqlsh将其连接到数据库。接下来,我们应该创建一个KEYSPACE:
CREATE KEYSPACE blogdemo WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 1};
出于本教程的目的,我们创建了一个只有一个数据副本的KEYSPACE 。现在,让我们将客户端会话连接到一个KEYSPACE:
USE <code class="language-shell">blogdemo;
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 版本 表示。我们可以在 CQL 时间戳、时间和日期中输入整数或字符串。持续时间类型的值被编码为 3 个有符号整数。
第一个整数表示月数,第二个整数表示天数,第三个整数表示纳秒数。
让我们看一个CREATE TABLE命令的示例:
CREATE TABLE date_types
(
primaryKey int PRIMARY KEY,
type1 timestamp,
type2 time,
type3 date,
type4 timeuuid,
type5 duration
);
3.4. 计数器类型
**计数器类型用于定义counter列。**计数器列是其值为 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
**我们可以使用 set 数据类型存储多个唯一值。**同样,在 Java 中,元素不是按顺序存储的。
让我们创建一个集合:
CREATE TABLE collection_types
(
primaryKey int PRIMARY KEY,
email set<text>
);
4.2. List
**在这种数据类型中,值以列表的形式存储。**我们不能改变元素的顺序。将值存储在列表中后,元素将获得特定的索引。我们可以使用这些索引来检索数据。
与集合不同,列表可以存储重复值。让我们在表中添加一个列表:
ALTER TABLE collection_types
ADD scores list<text>;
4.3. Map
使用 Cassandra ,我们可以使用 map 数据类型将数据存储在键值对集合中。键是唯一的。因此,我们可以按它们的键对映射进行排序。
让我们在表中添加另一列:
ALTER TABLE collection_types
ADD address map<uuid, text>;
5. Tuples
元组是一组不同类型的元素。这些集合具有固定长度:
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
);