在像Cassandra这样的NoSQL数据库的上下文中,列式存储与Redshift有何不同?如果Cassandra还是列式存储,那为什么不将它用于Redshift这样的OLAP应用程序呢?
答案 0 :(得分:3)
Cassandra和Redshift的存储引擎非常不同,并且是针对不同情况创建的。 在这类数据库(如Redshift,Vertica等)的众所周知的意义上,Cassandra的存储并不是真正的“列”,它更接近NoSQL世界中的键值系列。 Cassandra中使用的SQL语法不是任何ANSI SQL,并且可以在此处运行的查询集非常有限。 Cassandra的引擎为基于键而快速写入和读取记录而构建,而Redshift的引擎为快速聚合(MPP)而构建,并且广泛支持分析查询,以及在列级别存储,编码和压缩数据。
通过以下示例可以很容易地理解它:
假设我们有一个包含用户ID和许多指标(例如体重,身高,血压等)的表格。 我将在Redshift中运行汇总查询,例如平均权重,它将执行以下操作(在最佳情况下):
主服务器将查询发送到节点。
仅此特定列的数据将从存储中获取。
查询将在所有节点上并行执行。
最终结果将被拿到母版中。
在Cassandra中运行相同的查询,将导致扫描所有“行”,并且每个“行”可以具有多个版本,并且仅应使用最新版本进行聚合。如果您熟悉任何键值存储(Redis,Riak,DynamoDB等。),则效率不如扫描那里的所有键。
Cassandra多次用于Spark的分析工作流,充当存储层,而Spark充当实际的查询引擎,并且基本上不应该用于分析自行查询。随着每个版本的发布,越来越多的聚合功能被添加,但它远非真正的分析数据库。
答案 1 :(得分:0)
今天遇到同样的问题,发现AWS上的这个资源:https://aws.amazon.com/nosql/columnar/