8

像 Cassandra 这样的 NoSQL 数据库上下文中的列式存储与 Redshift 中的列式存储有何不同。如果 Cassandra 也是列式存储,那么为什么不将其用于 Redshift 等 OLAP 应用程序?

4

2 回答 2

12

Cassandra 和 Redshift 的存储引擎有很大的不同,是针对不同的情况创建的。Cassandra 的存储并不是像 Redshift、Vertica 等这类数据库广为人知的意义上的“列式”存储,它更接近于 NoSQL 世界中的键值族。Cassandra 中使用的 SQL 语法不是任何 ANSI SQL,并且可以在其中运行的查询集非常有限。Cassandra 的引擎是为快速写入和读取记录而构建的,基于 key,而 Redshift 的引擎是为快速聚合(MPP) 而构建的,并且广泛支持分析查询,以及在列级别存储、编码和压缩数据。

通过以下示例可以很容易地理解:

假设我们有一个包含用户 ID 和许多指标(例如体重、身高、血压等)的表格。我将在 Redshift 中运行聚合查询,例如平均权重,它将执行以下操作(在最佳情况下):

  1. Master 将向节点发送查询。

  2. 只有该特定列的数据将从存储中获取。

  3. 查询将在所有节点上并行执行。

  4. 最终结果将被提取给 master。

在 Cassandra 中运行相同的查询,将导致扫描所有“行”,并且每个“行”可以有多个版本,并且只有最新的应该用于聚合。如果您熟悉任何键值存储(Redis、Riak、DynamoDB 等),它的效果不如扫描那里的所有键。

Cassandra 多次与 Spark 一起用于分析工作流,充当存储层,而 Spark 充当实际的查询引擎,基本上不应该单独用于分析查询。随着每个版本的发布,越来越多的聚合功能被添加,但它离真正的分析数据库还很远。

于 2018-10-11T11:05:05.803 回答
0

今天遇到同样的问题,发现AWS上有这个资源:https ://aws.amazon.com/nosql/columnar/

于 2021-03-11T05:52:17.917 回答