面试题答案
一键面试基本原理
- 分区键:Cassandra 根据分区键将数据分布到不同的节点上。合理选择分区键能确保数据均匀分布,避免数据倾斜。同时,分区键相同的数据会存储在同一节点的同一个分区内。
- 集群键:集群键用于对同一分区内的数据进行排序。通过设置集群键,可以控制数据在分区内的存储顺序,从而实现按特定字段排序。在进行区间查询时,基于集群键的排序能快速定位到所需的数据范围。
操作步骤
- 选择分区键:
- 选择具有高基数(即取值丰富多样)的字段作为分区键,以保证数据均匀分布。例如,在一个用户订单系统中,如果按用户 ID 来分区,由于用户 ID 通常各不相同,能有效避免数据集中在少数几个节点上。
- 避免选择取值范围有限或经常变动的字段作为分区键,否则可能导致数据倾斜。
- 选择集群键:
- 选择需要排序的字段作为集群键。比如,若要按订单时间进行排序,可将订单时间字段设置为集群键。
- 可以使用复合集群键,即多个字段组合作为集群键。例如,先按订单日期,再按订单金额进行排序,就可以将订单日期和订单金额依次设置为复合集群键的组成部分。
- 创建表结构:在创建表时指定分区键和集群键。示例如下:
CREATE TABLE orders (
user_id UUID,
order_date TIMESTAMP,
order_amount DECIMAL,
order_id UUID,
PRIMARY KEY ((user_id), order_date, order_amount)
);
在上述示例中,user_id
是分区键,(order_date, order_amount)
是复合集群键。这样,相同 user_id
的订单数据会在同一分区内,且按 order_date
和 order_amount
排序存储。
4. 执行区间查询:基于设置好的分区键和集群键,在查询时可以利用集群键的排序特性。例如:
SELECT * FROM orders WHERE user_id = <specific_user_id> AND order_date >= '2023 - 01 - 01' AND order_date < '2023 - 02 - 01';
此查询会在 user_id
对应的分区内,按 order_date
的排序快速定位并返回符合日期区间的订单数据。