Apache Cassandra 预定义数据类型
介绍
作为一款著名的开源分布式 NoSQL 数据库系统,它能够管理大量的结构化数据。掌握 Cassandra 的各种数据类型对于充分利用其强大的设计至关重要。
本文将引导您了解内置和集合数据类型等关键元素,让您掌握知识,轻松优化数据库操作。
Apache Cassandra 中的内置数据类型
Apache Cassandra 提供了广泛的预定义数据类型,包括数值类型、文本类型、日期类型、计数器类型和其他自定义数据类型。
数值类型
它提供了各种数值数据类型,以满足不同的计算需求。这些包括 tinyint、smallint、int、bigint、decimal、double 和 float。tinyint 使用带符号的 8 位整数表示最小的整数,而 bigint 使用带符号的 64 位长整数表示最大的整数。
decimal 类型适用于精确的定点数,而 float 和 double 则设计用于浮点数,在精度和范围之间取得平衡。这些选项有助于根据特定用例优化数据存储策略,从而以有序的方式提高性能效率。
文本类型
文本类型保存和操作字符串数据。它们用途广泛,可在数据库中以各种方式使用。
text − 这是一个标准的字符串类型,保存以 UTF-8 编码的字符。它最多可容纳 20 亿个字符,非常适合存储大量文本数据。其语法为 'text'。示例代码如下:
String exampleCode = "CREATE TABLE my_table ( "+ " id UUID PRIMARY KEY, "+ " name text, "+ " description text "+ ");";
varchar − 与 text 数据类型类似,varchar 也存储字符字符串,长度限制为 20 亿个字符。区别在于它们在 Apache Cassandra 中的内部处理;但是,从用户的角度来看,它们是相同的。使用 varchar 的语法很简单,就是 'varchar'。例如:
CREATE TABLE users ( id UUID PRIMARY KEY, name VARCHAR );
ascii − 与 text 和 varchar 类型不同,ascii 类型仅保存与 ASCII 兼容的字符,存储容量较小,最大长度为 64k 字节(~65KB)。在处理旧系统或需要精确控制字符编码的数据时,它非常有用。语法为 'ascii',例如:
CREATE TABLE users ( id UUID PRIMARY KEY, name ASCII ); INSERT INTO users (id, name) VALUES (uuid(), 'V Sharma'); SELECT * FROM users;
uuid − 通用唯一标识符 (UUID) 字段存储标准化的 128 位标识符,适用于全局唯一标识用例,例如会话密钥、事务 ID 等。Apache Cassandra 中存在两种类型 - `uuid` 和 `timeuuid`。虽然 'uuid' 可以携带任何随机 UUID,但 'timeuuid' 通常与基于时间的 UUID 值一起使用,在这种情况下,基于时间的排序很重要。基于时间的排序很重要。示例:
CREATE TABLE events ( event_id timeuuid PRIMARY KEY, event_name text, event_time timestamp ); INSERT INTO events (event_id, event_name, event_time) VALUES (now(), 'Event 1', toTimestamp(now())); INSERT INTO events (event_id, event_name, event_time) VALUES (now(), 'Event 2', toTimestamp(now())); INSERT INTO events (event_id, event_name, event_time) VALUES (now(), 'Event 3', toTimestamp(now())); SELECT * FROM events ORDER BY event_time DESC;
inet − 此类型以 IPv4 或 IPv6 格式存储 IP 地址,可以在列式数据库系统中优雅地处理互联网网络寻址需求。例如:
CREATE TABLE users ( id UUID PRIMARY KEY, name text, ip_address inet );
日期类型
作为 Apache Cassandra 内置数据类型的一部分,日期类型对于管理和操作数据库中的日期和时间数据至关重要。使用这些类型可以精确控制日期和时间在数据集中表示的方式,有助于有效的数据建模技术。
date − 它表示特定的一天,不包含时间。其语法格式为 'YYYY-MM-DD'。要设置某个日期值,您可以编写:
`INSERT INTO table_name (column1) VALUES ('2022-10-14');`
time − 此类型代表一天中的时间,不参考特定的一天。它使用自午夜以来的纳秒数,范围从 0 到 86399999999999。例如:
`INSERT INTO table_name (column1) VALUES ('12:30');`
timestamp − 此预定义数据类型通常用于时间序列数据建模,它可以精确到毫秒地跟踪特定事件发生的时刻。例如:
`INSERT INTO table_name (column1) VALUES ('2022-10-14 12:30');`
duration − 使用月、日和纳秒间隔的组合来测量持续时间或周期,可以精确地处理较长的时间跨度。
计数器类型
Apache Cassandra 中的计数器数据类型允许您对计数器列执行递增和递减操作。以下是使用计数器类型的语法和代码:
要创建带有计数器列的表,您需要在列定义中将数据类型指定为 'counter'。例如:
CREATE TABLE my_table ( id UUID PRIMARY KEY, counter_column COUNTER );
要递增或递减计数器列的值,您可以使用带有 '+= n' 或 '-= n' 语法的 UPDATE 语句。例如:
要递增计数器列的值:
UPDATE my_table SET counter_column = counter_column + 1 WHERE id = 'some_id';
要递减计数器列的值:
UPDATE my_table SET counter_column = counter_column - 1 WHERE id = 'some_id';
检索计数器列的值与检索常规列的方式类似。但是,请记住,由于 Cassandra 的分布式性质,它不能保证计数器值的绝对精度。例如:
SELECT counter_column FROM my_table WHERE id = 'some_id';
Apache Cassandra 中的集合数据类型
在 Apache Cassandra 中,集合数据类型提供了一种在单个列中存储多个值的方法。Cassandra 中的三种主要集合数据类型是集合、列表和映射。
集合是唯一元素的无序集合,而列表保持元素的顺序并允许重复。映射由键值对组成,键和值都可以是 Cassandra 支持的任何数据类型。
Apache Cassandra 中的用户定义数据类型
Apache Cassandra 中的用户定义数据类型 (UDT) 允许您创建自己的自定义数据结构,这些结构可以用作数据库模式中的列类型。这提供了灵活性,可以在单个列内建模复杂和嵌套的数据关系。
要定义 UDT,您需要指定类型的名称及其字段以及相应的数 据类型。例如:
cql CREATE TYPE address ( street text, city text, state text, zip int );
在此示例中,我们定义了一个名为“address”的 UDT,它包含四个字段:street(text)、city(text)、state(text)和 zip(int)。
定义 UDT 后,它可以在创建表时用作列类型。这是一个示例:
cql CREATE TABLE users ( id UUID PRIMARY KEY, name text, email text, home_address frozen , );
在此表定义中,我们有一个名为“home_address”的列,其类型为 UDT“address”。关键字“frozen”用于指示 UDT 应被视为原子值。
在插入或更新此表中的行时,您将使用点表示法为“home_address”列的每个字段提供值。例如:
cql INSERT INTO users (id, name, email, home_address) VALUES (UUID(), 'John Doe', '[email protected]', {text: '123 Main St', city: 'New York', state: 'NY', zip: 10001});
您还可以将 UDT 嵌套在其他 UDT 中,甚至可以在集合(如集合、列表或映射)中使用它们。
总的来说,Apache Cassandra 中的用户定义数据类型为在数据库模式中建模复杂的数据结构提供了极大的灵活性。通过定义您自己的自定义类型,您可以创建更有意义和更直观的数据表示,使数据更容易使用和查询。
结论
了解 Apache Cassandra 中的预定义数据类型对于有效的数据建模和存储至关重要。通过利用这些内置数据类型(如数值类型、文本类型、日期类型和计数器类型)以及集合和用户定义类型,开发人员可以创建灵活且可扩展的体系结构,以满足他们的特定需求。
凭借 Apache Cassandra 的高性能和容错功能,它仍然是构建分布式系统和处理大规模数据存储需求的首选方案。利用此 NoSQL 数据库提供的广泛查询功能,进一步优化应用程序的性能。