带有 SSTable 附加二级索引的 Cassandra 与关系数据库

Cassandra with SSTable Attached Secondary Index vs relational database

我是Cassandra等nosql数据库的新手,目前看到这个二级索引和sstable附加二级索引。有些我对在 Cassandra 中使用二级索引的目的感到困惑,关系数据库和带二级索引的 Cassandra 有什么区别?哪个在查询时性能更好?

在卡桑德拉中:
在以下情况下您应该使用 SASI:

  • 您需要多条件搜索而您不需要 ordering/grouping/scoring
  • 您的搜索查询通常需要 100 到 1000 行
  • 你总是知道要搜索的行的分区键(这个也适用于原生二级索引)
  • 您想索引静态列(SASI 没有惩罚,因为它索引了整个分区)

如果出现以下情况,您应该避免使用 SASI:

  • 您要索引的分区非常宽,SASI 仅提供分区偏移量。昂贵的线性扫描仍然在 Cassandra 端执行,没有借助聚类列索引来跳过块
  • 您在搜索延迟方面有很强的 SLA,例如亚秒级要求
  • 您需要搜索分析场景(SASI 不适合获取一半的 table),除非您将 SASI 与位于同一位置的 Apache Spark 一起使用,但即使在这种情况下,搜索引擎也会以 2延迟的数量级 搜索结果的排序对您很重要

如果您决定在生产中尝试 SASI,请记住 SASI 确实会影响您的 write/flush 吞吐量、压缩吞吐量以及修复和流操作。这是意料之中的,因为 SASI 索引文件遵循 SSTable 生命周期。

来源:http://www.doanduyhai.com/blog/?p=2058

在 RDBMS 中:没有这样的限制。您可以对结果进行排序,执行聚合和分组。