Cassandra遵循哪种分区技术?

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

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

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

database cassandra partitioning sharding column-oriented
2个回答
1
投票

因为Cassandra是面向列的数据库

这一点已经在堆栈溢出specifically in this answer上进行了讨论。 Cassandra是NOT面向列的数据库。它是分区行存储。数据以类似于关系数据库的“行”的形式组织和显示。

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的哈希和分区分发过程的best描述。


1
投票

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

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