列式存储:Cassandra与Redshift

时间:2018-10-10 11:27:15

标签: cassandra amazon-redshift column-oriented

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

2 个答案:

答案 0 :(得分:3)

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

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

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

  1. 主服务器将查询发送到节点。

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

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

  4. 最终结果将被拿到母版中。

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

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

答案 1 :(得分:0)

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