面试题答案
一键面试-
创建索引优化查询:
- 在Cassandra中,可以为
customer_id
和status
创建复合索引。示例如下:
CREATE INDEX idx_customer_status ON orders (customer_id, status);
这样创建的复合索引能够有效优化基于
customer_id
和status
联合的查询。 - 在Cassandra中,可以为
-
对写入性能的影响:
- 创建索引后,写入性能会降低。这是因为每次写入数据时,除了插入主表数据外,Cassandra还需要更新索引结构。索引结构需要额外的存储和维护,每次写入都可能涉及到对索引的插入、更新等操作,增加了写入的I/O和计算开销。
-
降低影响的方法:
- 批量写入:使用批量操作(
BATCH
语句)将多个写入操作合并成一个请求,减少写入操作的次数,从而降低对索引更新的频率。例如:
BEGIN BATCH INSERT INTO orders (order_id, customer_id, order_date, total_amount, status) VALUES (uuid(), uuid(), toTimestamp(now()), 100.5, 'completed'); INSERT INTO orders (order_id, customer_id, order_date, total_amount, status) VALUES (uuid(), uuid(), toTimestamp(now()), 200.75, 'pending'); APPLY BATCH;
- 异步写入:利用Cassandra的异步写入特性,将写入操作放入队列,后台异步处理,减少写入操作对应用程序响应时间的影响。
- 合理设计索引:避免创建过多不必要的索引,只创建确实需要用于查询优化的索引。因为每个索引都增加了维护成本,减少索引数量能降低写入时索引更新的开销。
- 批量写入:使用批量操作(