柱状存储:卡桑德拉与红移



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

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

通过以下示例可以轻松理解:

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

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

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

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

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

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

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

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

最新更新