Coursera 笔记

Module 03 · Introducing Apache Cassandra: An Open-Source NoSQL Database

CRUD Operations - Part 1Apache Cassandra CRUD 操作:插入与更新

Coursera ↗

欢迎观看关于 Apache Cassandra 插入与更新操作 的视频。在本视频中,您将能够:

  • 描述 Cassandra 中的 写操作,
  • 解释 INSERT 和 UPDATE 操作的过程,
  • 了解 轻量级事务(Lightweight Transactions)的作用。

 写操作流程

集群级别的写操作

在 Cassandra 中,当进行写操作时,接收写请求的节点会成为 协调节点。协调节点负责确保操作的完成,并将写操作的结果返回给用户。写操作会被发送到目标分区的所有副本节点,但为了操作成功,必须有至少满足一致性要求的节点确认。

示例

假设我们有一个复制因子为 3 的键空间,且一致性级别为 2。写操作到达节点 4,节点 4 会将写请求转发到节点 1、2 和 3。然而,如果节点 2 不可用,只有节点 1 和 3 会返回确认。协调节点会检查确认的节点数量,并与预期的一致性值进行比较,最终返回操作结果。


 Cassandra 中的写入操作

在 Cassandra 中,写操作的一个重要特点是,默认情况下 写操作不会先读取数据。数据会直接写入内存中的 Memtable,然后定期刷新到磁盘上的 SSTable 文件中。当 Memtable 填满时,数据会被刷新到磁盘。

每个写操作都会附加一个 时间戳,用于数据的冲突解决,保证最新的数据优先。


 INSERT 操作

INSERT 操作要求完整的主键列,且每次插入数据时,主键都必须被完全指定。由于 Cassandra 默认不进行读取操作,INSERT 操作同时也充当 Upsert 操作——如果插入的数据已存在,则会更新该数据。

插入数据示例

INSERT INTO users (username, groupid, age) VALUES ('john_doe', 12, 30);
  • Time-to-Live (TTL):可以在插入时设置 TTL,让数据在指定时间后自动过期。
INSERT INTO users (username, groupid, age) VALUES ('jane_doe', 25, 32) USING TTL 10;

该数据将在 10 秒后过期,不再可查询。


 UPDATE 操作

UPDATE 操作允许修改已存在的记录。当您更新数据时,如果记录不存在,Cassandra 会将其视为插入操作。

更新数据示例

  • 更新单一列:假设我们要更新 groupid = 45 的记录中的 用户名,由于这是静态列,仅需指定 分区键。
UPDATE groups SET group_name = 'new_group_name' WHERE groupid = 45;
  • 更新已存在的记录:如果更新数据已存在的记录,如更新用户的 年龄,操作类似于插入。
UPDATE users SET age = 45 WHERE username = 'john_doe' AND groupid = 12;

 轻量级事务(Lightweight Transactions)

默认情况下,Cassandra 不会在执行写操作之前进行读取。因此,INSERT 和 UPDATE 操作在行为上非常相似。然而,您可以通过 轻量级事务 来强制在执行写操作之前进行读取。

轻量级事务的使用

在 INSERT 或 UPDATE 语句中使用 IF 子句,Cassandra 将在执行写操作前先检查数据是否满足某些条件。

示例 1:条件更新

UPDATE users SET age = 35 WHERE username = 'john_doe' IF age = 30;

这表示只有在 age 列的值为 30 时,才会更新为 35。

示例 2:条件插入

INSERT INTO users (username, groupid, age) VALUES ('jane_doe', 25, 30) IF NOT EXISTS;

如果记录已经存在,则不会执行插入操作。

性能影响

轻量级事务比普通的 INSERT 和 UPDATE 操作慢,约为其四倍。因此,应该谨慎使用。


 总结

在本视频中,您学习了:

  • 写操作:Cassandra 默认不执行读取操作,INSERT 和 UPDATE 操作具有相似的行为。
  • 轻量级事务:通过 IF 子句在 INSERT 和 UPDATE 中强制执行读取操作,但会影响性能,使用时需要谨慎。
  • 集群级别的写操作:写操作会发送到所有副本节点,并根据一致性级别进行确认。

这些操作帮助您管理 Cassandra 中的数据插入与更新。