Cassandra 是面向列的还是列式数据库

问题描述 投票:0回答:6

列式数据库应该将一组列存储在一起。 但 Cassandra 按行存储数据。 SS 表将保存映射到其相应分区键的多行数据。所以我觉得 Cassandra 是像 MySQL 一样的行式数据存储,但还有其他好处,比如“宽行”,并且每列不一定都存在于所有行中,当然它在内存中。如果我错了请纠正我。

cassandra nosql column-oriented wide-column-store
6个回答
37
投票

如果您访问 GitHub 上的 Apache Cassandra 项目,并向下滚动到“执行摘要”,您将得到答案:

Cassandra 是分区行存储。行被组织成表 具有所需的主键。

分区意味着 Cassandra 可以将您的数据分布在 在应用程序透明的情况下使用多台机器。卡桑德拉将 当机器添加或删除时自动重新分区 集群。

行存储意味着像关系数据库一样,Cassandra 组织 按行和列排列的数据。

“所以我觉得 Cassandra 是一个行式数据存储”

那是正确的。


34
投票
  • 在面向列或列式数据库中,数据以列方式存储在磁盘上。

    例如: 桌子

    Bonuses
    桌子

       ID         Last    First   Bonus
       1          Doe     John    8000
       2          Smith   Jane    4000
       3          Beck    Sam     1000
    
  • 面向行的数据库管理系统中,数据将这样存储:

    1,Doe,John,8000;2,Smith,Jane,4000;3,Beck,Sam,1000;

  • 面向列的数据库管理系统中,数据将这样存储:

    1,2,3;Doe,Smith,Beck;John,Jane,Sam;8000,4000,1000; 

  • Cassandra 基本上是一个列族商店

  • Cassandra 会将上述数据存储为:

    Bonuses: { row1: { "ID":1, "Last":"Doe", "First":"John", "Bonus":8000}, row2: { "ID":2, "Last":"Smith", "Jane":"John", "Bonus":4000} ... }

  • Vertica、VectorWise、MonetDB 是我听说过的一些面向列的数据库。

  • 阅读this了解更多详情。

希望这有帮助。


3
投票

将 cassandra 视为一个映射的映射,其中内部映射按键排序。一个分区有很多列,它们总是存储在一起。它们按聚类键排序 - 首先按第一个键,然后是下一个,然后是下一个......依此类推。然后分区在副本之间进行复制。它不一定存储为“行”,因为根据复制策略和主动哈希算法,不同的行存储在不同的节点上。换句话说,如果 ProductId 是分区键,则 ProductId 1 的分区可能不会存储在 ProductId 2 旁边。然而,产品 ID 1 的列始终存储在一起。

就定义而言,大多数 NoSQL 商店都以某种方式模糊了界限。它们通常跨越多个类别。我将由您决定这是否符合列式数据库的条件:)


3
投票

它是一个宽列数据库,也称为列族数据库。 维基百科的定义也有进一步帮助:

Bigtable 和 Apache Cassandra 等宽列存储不是该术语原始意义上的列存储,因为它们的两级结构不使用列式数据布局。在真正的列存储中,采用列式数据布局,使得每一列单独存储在磁盘上。宽列存储通常支持单独存储的列族的概念。然而,每个这样的列族通常包含一起使用的多个列,类似于传统的关系数据库表。在给定的列族中,所有数据都以逐行的方式存储,使得给定行的列存储在一起,而不是每列单独存储。支持列族的宽列存储也称为列族数据库。

参考:https://en.wikipedia.org/wiki/Wide-column_store


1
投票

简短回答:

Cassandra 有列族的概念,但它不是面向列。

长答案:

引用我读过的最好的书的一部分:Martin Kleppmann 的《设计数据密集型应用程序》:

Cassandra 和 HBase 有一个列族的概念,它们继承自 Bigtable。然而,将它们称为面向列是非常具有误导性的:在每个列族中,它们将一行中的所有列以及行键存储在一起,并且不使用列压缩。因此,Bigtable 模型仍然主要是面向行的。


0
投票

根据 Martin Kleppmann 的说法,将 HBase 和 Cassandra 称为列式数据库是一种误导。他们使用列族的概念,其中每个列族存储行中的列。它们基于面向行的大表

© www.soinside.com 2019 - 2024. All rights reserved.