Coursera 笔记

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

CRUD Operations - Part 2Apache Cassandra CRUD 操作:读取与删除数据

Coursera ↗

欢迎观看关于 Cassandra 读取与删除数据 的视频。在本视频中,您将能够:

  • 描述 Cassandra 集群中的 读取过程,
  • 解释 SELECT 语句的使用原则,
  • 描述如何在 Cassandra 中删除数据。

 Cassandra 读取数据过程

集群级别的读取操作

在 Cassandra 中,当一个读取请求被发送到集群时,接收该请求的节点成为 协调节点,并负责完成该操作。读取请求会被发送到根据一致性设置指定的副本节点。例如,一致性级别设置为 2 时,只有三个副本中的两个会被联系起来。

协调节点会检查接收到的响应并进行协调,若出现不一致情况,Cassandra 会基于时间戳来解决冲突,最终将结果返回给用户。


 SELECT 语句的使用原则

Cassandra 中的读取操作使用 SELECT 语句。为了确保最佳性能,以下是几个重要的原则:

  • 始终使用分区键:查询时始终以分区键开头,限制查询仅涉及该分区的副本。
  • 按主键顺序过滤:查询时按照主键字段的顺序进行筛选,这样可以获得最佳性能。
    • 例如,主键由一个分区键和两个聚类键组成,首先筛选分区键是可以的。
    • 分区键支持等值查询和 IN 操作。
    • 过滤分区键和第一个聚类键是可以的。
    • 但若尝试过滤聚类键而不指定分区键,将无法正常工作。

错误的 SELECT 查询例子

  • 选择所有数据:例如,在一个有 1000 个节点的集群中,选择所有数据将导致查询发送到所有节点,性能将非常差,甚至可能出现超时。
  • 过滤普通列:不能直接过滤非主键列,若需要过滤,可以考虑创建索引或重建数据模型。

 Cassandra 删除数据

在 Cassandra 中,删除操作既可以删除记录,也可以删除某个单元格的值。删除操作是通过在数据上写入一个特殊的值 —— 墓碑(Tombstone)来标记数据已被删除。

删除数据示例

  • 删除特定主键数据:
DELETE FROM groups WHERE groupid = 45 AND username = 'john_doe';
  • 删除单元格数据:
DELETE age FROM users WHERE username = 'john_doe' AND groupid = 12;

删除操作注意事项

  • 删除范围:删除操作还可以针对整个分区或数据范围进行。例如,删除某个时间段内的所有数据。
  • 删除的延迟处理:删除操作并不会立即从磁盘中移除数据,而是将其标记为 墓碑,数据依然存在,直到 gc_grace_seconds 配置时间过后才会被清理。默认情况下,gc_grace_seconds 为 10 天。

墓碑机制

  • 墓碑(Tombstone)是表示数据已删除的特殊标记。例如,如果删除操作成功,节点会返回墓碑信息,表示特定的主键数据已被删除。墓碑会持续一段时间,直到 Cassandra 执行 垃圾回收。

 总结

在本视频中,您学习了:

  • 读取过程:在 Cassandra 中,读取操作只会发送到与一致性设置匹配的副本节点,协调节点负责查询的协调和结果返回。
  • SELECT 查询规则:要保证最佳性能,查询时应该始终从分区键开始,并遵循主键字段的顺序进行筛选。
  • 删除操作:删除操作通过墓碑标记删除的记录,墓碑会在一定时间后被清理。删除操作可能影响系统性能,因此在使用时需要谨慎。

这些操作帮助您有效地管理 Cassandra 中的数据读取与删除。