Cassandra 等 NoSQL 数据库上下文中的列式存储与 Redshift 中的列式存储有何不同。如果 Cassandra 也是列式存储,那么为什么它不用于 Redshift 等 OLAP 应用程序?
最佳答案
Cassandra 和 Redshift 的存储引擎非常不同,并且是为不同的情况创建的。
Cassandra 的存储在这种类型的数据库(如 Redshift、Vertica 等)的广为人知的含义中并不是真正的“列式”,它更接近 NoSQL 世界中的键值系列。 Cassandra 中使用的 SQL 语法不是任何 ANSI SQL,并且可以在那里运行的查询集非常有限。 Cassandra 的引擎专为快速写入和读取记录而构建,基于 key ,而 Redshift 的引擎是为 构建的快速聚合 (MPP),并广泛支持分析查询,并在列级别存储、编码和压缩数据。
用下面的例子很容易理解:
假设我们有一个包含用户 ID 和许多指标(例如体重、高度、血压等)的表格。
我将在 Redshift 中运行聚合查询,例如平均权重,它将执行以下操作(在最佳情况下):
在 Cassandra 中运行相同的查询,将导致扫描所有“行”,每个“行”可以有多个版本,并且只有最新的应该用于聚合。如果您熟悉任何键值存储(Redis、Riak、DynamoDB 等),它不如扫描那里的所有键有效。
Cassandra 多次用于 Spark 的分析工作流,充当 存储层,而 Spark 充当实际 查询引擎 ,并且基本上不应该单独用于分析查询。随着每个版本的发布,越来越多的聚合能力被加入,但它离真正的分析数据库还很远。
关于cassandra - 列式存储 : Cassandra vs Redshift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52739192/