📜  Cassandra 3.0 中的本地索引和物化视图(1)

📅  最后修改于: 2023-12-03 14:59:53.414000             🧑  作者: Mango

Cassandra 3.0 中的本地索引和物化视图

Apache Cassandra 是一个高可用性、面向列的分布式NoSQL 数据库系统。Cassandra 3.0版本引入了本地索引和物化视图的概念,这使得Cassandra更加灵活和易于使用。本文将介绍本地索引和物化视图的概念、语法和用法。

本地索引

本地索引是指在单个节点上建立的索引。在此之前,Cassandra 只能建立全局索引,这回影响性能。在Cassandra 3.0 中,我们可以使用CREATE INDEX命令在表上创建本地索引。基本语法如下:

CREATE INDEX <index_name> ON <table_name> (<column_name>);

例如:我们在ToonifyUsers表上创建userName的索引,语句如下:

CREATE INDEX user_name_index ON ToonifyUsers (userName);
物化视图

物化视图是对现有表的一种重构,以便可以使用新查询模式和新的聚合方法。物化视图与表具有相同的行和列,并将数据存储在具有特定名称的具有特定分区和排序的新表中。您可以使用standard(标准)CQL查询或聚合查询从物化视图中查询。物化视图具有与表相同的复制策略,并随源表的更新以同步保持最新状态。基本语法如下:

CREATE MATERIALIZED VIEW view_name AS
  SELECT <columns>
  FROM <source_table_name>
  WHERE <conditions>
  PRIMARY KEY <primary_key>
  WITH <options>;

例如:我们从ToonifyUsers表中创建心跳速率物化视图,语句如下:

CREATE MATERIALIZED VIEW user_heartbeat_view AS
  SELECT userId, userName, heartbeat
  FROM ToonifyUsers
  WHERE userId IS NOT NULL AND heartbeat IS NOT NULL
  PRIMARY KEY (userId, heartbeat, userName)
  WITH CLUSTERING ORDER BY (heartbeat DESC);
使用本地索引和物化视图

我们可以将索引和物化视图和查询语句一起使用。使用SELECT命令查询ToonifyUsers表中的userName和password,同时使用user_name_index索引,语句如下:

SELECT userName, password
FROM ToonifyUsers
WHERE userName='John' ALLOW FILTERING;

我们还可以使用物化视图。使用SELECT语句从心跳率物化视图中查询基于userId和heartbeat的心跳率,语句如下:

SELECT *
FROM user_heartbeat_view
WHERE userId=1 AND heartbeat=123456789;
多个物化视图

Cassandra 3.0 还支持在一个表上创建多个物化视图。但是,每个物化视图的基本结构(不包括主键和分区)必须与源表的基本结构相同。这是确保物化视图更新时不会破坏源表数据的重要保障。

总结

Cassandra 3.0中的本地索引和物化视图使得Cassandra更加好用,更加灵活。本地索引提高了查询的执行效率,而物化视图则允许我们按照不同的方式查询和聚合数据。本文介绍了基本语法,以及如何使用本地索引和物化视图。我们还介绍了多个物化视图的概念。