cassandra - Cassandra 中的 SASI 索引以及它与普通索引有何不同

标签 cassandra cassandra-3.0

我开始使用SASI索引并使用以下设置,

CREATE TABLE employee (
    id int,
    lastname text,
    firstname text,
    dateofbirth date,
    PRIMARY KEY (id, lastname, firstname)
) WITH CLUSTERING ORDER BY (lastname ASC, firstname ASC));

CREATE CUSTOM INDEX employee_firstname_idx ON employee (firstname) USING 'org.apache.cassandra.index.sasi.SASIIndex' WITH OPTIONS = {'mode': 'CONTAINS', 'analyzer_class': 'org.apache.cassandra.index.sasi.analyzer.StandardAnalyzer', 'case_sensitive': 'false'};

我执行以下查询,

SELECT * FROM employee WHERE firstname like '%s';

根据我的研究,它似乎与 Cassandra 中的普通二级索引相同,除了提供 LIKE 搜索,

1)有人可以解释一下它与 Cassandra 中的普通二级索引有何不同吗?
2) 最好的配置是什么,例如模式、analyzer_class 和 case_sensitive - 有相关推荐文档吗?

最佳答案

1) 有人可以解释一下它与 Cassandra 中的普通二级索引有何不同吗?

普通二级索引本质上是另一个由二级索引列和主键组成的查找表。因此它有自己的一组 sstable 文件(磁盘)、memtable(内存)和写入开销(cpu)。

SASI 是 Cassandra 社区开源的一项改进(由 Apple 贡献)。该索引是为每个刷新到磁盘的 SSTable 创建的,并且不维护单独的表。因此,磁盘使用量更少,没有单独的内存表/布隆过滤器/分区索引(内存更少)并且开销最小。

2) 模式、analyzer_class 和 case_sensitive 等最佳配置是什么 - 有相关推荐文档吗?

配置取决于您的用例:-

本质上有三种模式

  1. PREFIX - 用于根据索引列的前缀提供 LIKE 查询
  2. CONTAINS - 用于根据索引列中是否存在搜索词来提供 LIKE 查询
  3. SPARSE - 用于索引稀疏数据(每个术语/列值的匹配键少于 5 个)。例如跨越大时间戳的范围查询。

Analyzer_class:可以指定分析器来分析指定列中的文本。

  1. NonTokenizingAnalyzer 用于不分析文本但需要大小写标准化或敏感性的情况。
  2. StandardAnalyzer 用于进行涉及词干提取、大小写标准化、区分大小写、跳过“and”和“the”等常用词以及用于完成分析的语言本地化的分析<

case_sensitive :顾名思义,是否应不区分大小写地搜索索引列。适用的值是

  1. 正确
  2. 错误

详细文档引用here以及关于 performance 的详细博客文章.

关于cassandra - Cassandra 中的 SASI 索引以及它与普通索引有何不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48734670/

相关文章:

java - 在java中访问父类中的子常量

cassandra - 在 Cassandra/宽行中混合列类型

java - Hector querySuperColumn 与 countSubColumns 不匹配

cassandra - 从没有墓碑和 ttl 的 Cassandra 中删除整个分区?

java - 使用 Cassandra Metrics 进行监控

java - 具有多个上下文的 Spark 作业失败

c# - Cassandra 并行插入性能 c#

cassandra - 墓碑与节点工具和修复

cassandra-3.0 - 如何在 Docker 上设置 JanusGraph Cassandra

cassandra - cassandra中主键上的模式匹配 'like'