cassandra - 列式存储 : Cassandra vs Redshift

标签 cassandra amazon-redshift column-oriented

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

最佳答案

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

用下面的例子很容易理解:

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

  • Master 将向节点发送查询。
  • 只会从存储中获取此特定列的数据。
  • 查询将在所有节点上并行执行。
  • 最终结果将被获取到 master。

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

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

    关于cassandra - 列式存储 : Cassandra vs Redshift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52739192/

    相关文章:

    nosql - NoSQL 数据库之间的差异

    java - 在 Java 中转换为面向列的数组

    sql - 在 Amazon REdshift 中查看权限 - 重新创建基础表并阻止查看权限

    spring-boot - Kubernetes 无法访问 cassandra 数据库

    Cassandra写入一致性, “transaction”失败后会发生什么?

    merge - 将多个查询作为一个结果处理

    python - 使用 Psycopg2 从 Redshift 写入文件抛出异常

    java - 如何从 Scala 连接 Amazon Redshift

    column-family - 宽列 vs 列族 vs 柱状 vs 面向列的数据库定义

    python - 从一台特定电脑连接时,Cassandra 集群返回不正确的错误 "Keyspace does not exist"