【问题标题】:Cassandra follows which partitioning technique?Cassandra 遵循哪种分区技术?
【发布时间】:2020-05-21 18:32:44
【问题描述】:

我是 Cassandra 的新手,在阅读有关数据库分区(垂直和水平)的信息时,我感到很困惑,想知道 Cassandra 是遵循水平分区(分片)还是垂直分区技术?

此外,据我了解,由于 Cassandra 是面向列的数据库,因此它应该遵循垂直分区技术。如果不是这种情况,那么任何人都可以详细解释一下吗?

【问题讨论】:

  • 你说的是缩放吗?缩放和分区都是不同的东西。但是 Cassandra 很好地支持水平缩放而不是垂直缩放。
  • 不,我说的是分片,即分区。基本上,我想知道在 Cassandra 中是否也对任何列进行了分区,或者对于特定表,所有列都保留在一个节点中,并且只对行进行分区并使用分区键标识节点?

标签: database cassandra partitioning sharding column-oriented


【解决方案1】:

因为 Cassandra 是面向列的数据库

这一点已经在 Stack Overflow 上讨论过,specifically in this answer。 Cassandra 不是 面向列的数据库。它是一个分区的行存储。数据以“行”的形式组织和呈现,类似于关系数据库。

Cassandra 是否遵循水平分区(分片)

从技术上讲,Cassandra 就是您所说的“分片”数据库,但几乎从未以这种方式提及它。本质上,每个节点负责特定范围的分区。这些分区(令牌)是一个数值,Murmur3Partitioner 范围从 -2^63 到 +2^63-1。

事实上,在一个节点被简化为持有一个单个令牌范围的场景中,您可以像这样根据集群(数据中心)中节点的数量来计算范围:

python -c 'print [str(((2**64 / 6) * i) - 2**63) for i in range(6)]'

['-9223372036854775808', '-6148914691236517206', '-3074457345618258604',
 '-2', '3074457345618258600', '6148914691236517202']

当然对于vNodes,一个节点几乎总是负责多个令牌范围。

在操作时,分区键被散列成一个令牌。这个令牌告诉 Cassandra 数据驻留在哪个节点上。考虑这张表:

SELECT token(studentid),studentid,fname,lname FROM student ;

 system.token(studentid) | studentid | fname | lname
-------------------------+-----------+-------+----------
    -5626264886876159064 | janderson | Jordy | Anderson
    -1472930629430174260 |   aploetz | Avery |   Ploetz
     8993000853088610283 |      mgin | Micah |      Gin

(3 rows)

因为这个表有一个简单的主键定义studentid,它被用作分区键。上面token(studentid)函数的结果表明哪些分区包含数据。

如果有另一个表也使用studentid 作为其分区键,则该表的数据将存储在与student 表相同的节点上。

无论如何,这是所发生情况的简化版本。随意阅读 vNodes(上面的链接)以及 Robbie Strickland 的 Cassandra: High Availability。他撰写了 (IMO) 对 Cassandra 的散列和分区分布过程的最佳描述。

【讨论】:

  • 感谢@Aaron 的澄清。这个link 描述了 column-store 和 column-family-store 之间的良好区别。
【解决方案2】:

Cassandra 在散列算法上实现分区。因此,Cassandra 允许有效的水平扩展(如果正确选择了分区键)。总之,当您创建表时,您定义了分区列。当您插入一条记录时,Cassandra 将获取这些值,对其进行哈希处理,并确定它所属的节点。如果您的 RF 配置 > 1,则还将选择备用副本。它的工作原理与 Oracle 的哈希分区没有什么不同,只是 Oracle 只在存储层而不是主机层(除非您使用 Oracle 分片)。

【讨论】:

    猜你喜欢
    • 2017-01-18
    • 1970-01-01
    • 2011-01-17
    • 2011-12-26
    • 2013-10-07
    • 2011-03-26
    • 2010-10-07
    • 2013-10-16
    • 2010-09-12
    相关资源
    最近更新 更多