列式存储:Cassandra 与 Redshift

Columnar storage: Cassandra vs Redshift

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

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

下面的例子很容易理解:

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

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

  2. 只会从存储中提取此特定列的数据。

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

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

运行在Cassandra中同一个查询,会扫描所有"rows",每个"row"可以有多个版本,聚合时只用最新的。如果您熟悉任何键值存储(Redis、Riak、DynamoDB 等),它的效率不如扫描那里的所有键。

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

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