首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么二级指数在Cassandra中效率较低?

为什么二级指数在Cassandra中效率较低?
EN

Stack Overflow用户
提问于 2020-05-21 22:29:28
回答 1查看 981关注 0票数 2

我在Cassandra文档中看到,创建二级索引的效率较低,因为在最坏的情况下,它需要接触所有节点才能找到该非键列的数据。

但我怀疑,即使我们不创建二级索引,它也必须触及所有节点(在最坏的情况下),并找出具有这个非键列值的特定行位于何处。

注意:是的,我知道,如果基数很高,则次要索引将包含(存储)索引,大多数行都是这样,这样就不利于存储。但我想知道,不创建二级索引比创建二级索引更有效?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-22 09:44:04

辅助索引只应在特定情况下使用,例如,当您将它们与分区键列上的条件一起使用时,数据具有正确的基数,等等。

例如,如果我们有下表:

代码语言:javascript
运行
复制
create table test.test (
  pk int,
  c1 int,
  val1 int,
  val2 int,
  primary key(pk, c1));

并且您在列val2上创建了一个辅助索引,接下来的查询将非常有效:

代码语言:javascript
运行
复制
select * from test.test where pk = 123 and val2 = 10

因为您只将查询的执行限制在具有值pk123副本的节点上。

但如果你这么做

代码语言:javascript
运行
复制
select * from test.test where val2 = 10

然后卡桑德拉将需要到每个节点,并要求那里的数据-它会慢得多,并给协调节点的压力。

标准二级索引还有其他的局限性,如只搜索特定的值,当列的基数很低或很高时出现的问题等。从设计角度看,SASI索引更好,尽管它们仍然是实验性的,而且在实现上也存在问题。

您可以在下面的博客帖子中找到有关实现辅助索引的技术细节。

DataStax在商业产品中还有其他实现:

  • 基于Apache的DSE搜索,因此您可以获得很大的灵活性(全文搜索、范围查询等)。
  • 名为SSTable附加索引(SAI)的新实现--它们目前被标记为beta,但它们提供了比标准二级索引更大的灵活性,比DSE搜索的开销更小。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61944845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档