Cassandra中的SASI索引及其与正常索引的不同之处

Har*_*rry 4 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'};
Run Code Online (Sandbox Code Playgroud)

我执行以下查询,

SELECT * FROM employee WHERE firstname like '%s';
Run Code Online (Sandbox Code Playgroud)

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

1)有人可以解释它与Cassandra的正常二级指数的区别吗?
2)什么是最好的配置,如mode,analyzer_class和case_sensitive - 为此推荐的任何文档?

谢谢,
哈利

dil*_*ngi 7

1)有人可以解释它与Cassandra的正常二级指数的区别吗?

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

SASI是一个改进的开源(由Apple提供)给Cassandra社区.为每个刷新到磁盘的SSTable创建此索引,并且不维护单独的表.因此,磁盘使用量减少,没有单独的memtable/bloom过滤器/分区索引(更少的内存)和最小的开销.

2)什么是最好的配置,如mode,analyzer_class和case_sensitive - 为此推荐的任何文档?

配置取决于您的使用案例: -

基本上有三种模式

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

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

  1. 所述NonTokenizingAnalyzer用于在未分析的情况下的文本,但需要的情况下归一化或灵敏度.
  2. 所述StandardAnalyzer用于那些涉及词干分析,案例规范化,大小写,跳绳等的常用词"和"和"该",和用来完成分析的语言的本地化

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

  1. 真正

详细的文档参考这里和详细的博客文章性能.


Nad*_*'El 5

以下是来自https://github.com/scylladb/scylla/wiki/Indexing-in-Cassandra-3的 SASI 简短摘要:

SASI(“SStable 附加二级索引”的缩写)是经典 Cassandra 二级索引的重新实现,其主要目标是 - 有效支持更复杂的搜索查询,例如:

  • AND 或 OR 查询组合。
  • 字符串值中的通配符搜索。
  • 范围查询。
  • 字符串值中受 Lucene 启发的单词搜索(包括分词、大写规范化、词干提取等,由用户给定的“分析器”确定)。

其中一些事情已经可以通过二级索引实现,但效率低下,因为需要获取一长串分区,读取它们(需要对每个分区进行低效的搜索)并对它们进行过滤。SASI 使用基于 B+ 树的新磁盘格式来实现它们,并且不会像经典的二级索引方法那样重用常规 Cassandra 列族或 sstable。

SASI 将其自己的不可变索引文件附加到每个 sstable(因此也是此方法的名称),并且还将索引附加到每个 memtable。在压缩过程中,被压缩在一起的文件的索引也会被压缩以创建一个新索引。