Module 03 · Introducing Apache Cassandra: An Open-Source NoSQL Database
CRUD Operations - Part 2Apache Cassandra CRUD 操作:读取与删除数据
欢迎观看关于 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 中的数据读取与删除。