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

时间:2014-08-22 07:40:01

标签: cassandra nosql column-oriented wide-column-store

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

4 个答案:

答案 0 :(得分:14)

如果您转到Apache Cassandra project on GitHub,请向下滚动到"执行摘要,"你会得到答案:

  

Cassandra是一个分区行存储。行被组织成表格   使用必需的主键。

     

分区意味着Cassandra可以分发您的数据   应用程序透明的多个机器。卡桑德拉会   在添加和删除计算机时自动重新分区   群集。

     

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

"所以我觉得Cassandra是一个明智的数据存储"

这是正确的。

答案 1 :(得分:9)

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

    例如: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会将以上数据存储为, "Bounses" : { row1 : { "ID":1, "Last":"Doe", "First":"John", "Bonus":8000}, row2 : { "ID":2, "Last":"Smith", "Jane":"John", "Bonus":4000} ... }
  • Vertica,VectorWise,MonetDB是我听说过的一些面向列的数据库。

  • 阅读this了解详情。

希望这有帮助。

答案 2 :(得分:0)

考虑cassandra的好方法是作为地图的地图,其中内部地图按键排序。分区有很多列,它们总是存储在一起。它们按聚类键排序 - 首先是第一个键,然后是下一个键,然后是下一个......依此类推。然后在副本之间复制分区。它不一定存储为“行”,因为基于复制策略和主动散列算法,不同的行存储在不同的节点上。换句话说,如果ProductId是分区键,则ProductId 1的分区可能不会存储在ProductId 2旁边。但是,产品ID 1的颜色始终存储在一起。

至于定义,大多数NoSQL商店都会以某种方式模糊这些行。它们通常跨越多个类别。我将由您决定是否符合列式数据库的要求:)

答案 3 :(得分:0)

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

<块引用>

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

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