Database Cassandra遵循哪种分区技术?
我是Cassandra的新手,在阅读有关数据库分区(垂直和水平)的文章时,我感到困惑,想知道Cassandra是遵循水平分区分片还是垂直分区技术Database Cassandra遵循哪种分区技术?,database,cassandra,partitioning,sharding,column-oriented,Database,Cassandra,Partitioning,Sharding,Column Oriented,我是Cassandra的新手,在阅读有关数据库分区(垂直和水平)的文章时,我感到困惑,想知道Cassandra是遵循水平分区分片还是垂直分区技术 此外,根据我的理解,因为Cassandra是面向列的DB,所以它应该遵循垂直分区技术。如果不是这样的话,有人能详细解释一下吗 Cassandra在散列算法上实现分区。因为Cassandra允许在正确选择分区键的情况下进行有效的水平缩放。总之,在创建表时,定义分区列。插入记录时,Cassandra将获取值,对其进行散列,并确定它所属的节点。如果已将RF配
此外,根据我的理解,因为Cassandra是面向列的DB,所以它应该遵循垂直分区技术。如果不是这样的话,有人能详细解释一下吗 Cassandra在散列算法上实现分区。因为Cassandra允许在正确选择分区键的情况下进行有效的水平缩放。总之,在创建表时,定义分区列。插入记录时,Cassandra将获取值,对其进行散列,并确定它所属的节点。如果已将RF配置为>1,则还将选择备用副本。它的工作方式与Oracle的散列分区没有什么不同,只是Oracle只在存储层执行,而不是在主机层执行,除非您使用Oracle分片。Cassandra在散列算法上实现分区。因为Cassandra允许在正确选择分区键的情况下进行有效的水平缩放。总之,在创建表时,定义分区列。插入记录时,Cassandra将获取值,对其进行散列,并确定它所属的节点。如果已将RF配置为>1,则还将选择备用副本。它的工作方式与Oracle的散列分区没有什么不同,只是Oracle只在存储层执行,而不是在主机层执行,除非您使用Oracle分片 因为Cassandra是面向列的DB 这一点已经在堆栈溢出上讨论过了。Cassandra不是一个面向列的数据库。这是一个分区行存储。数据是按行组织和显示的,类似于关系数据库 Cassandra是否遵循水平分区分片 从技术上讲,Cassandra是一个分片数据库,但它几乎从未以这种方式被提及。本质上,每个节点负责特定范围的分区。这些分区标记是一个数值,范围为-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']
当然,一个节点几乎总是负责多个令牌范围
在操作时,分区密钥被散列到令牌中。此标记告诉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主键定义,它被用作分区键。上面的tokenstudentid函数的结果指示哪些分区包含数据
如果有另一个表也使用studentid作为其分区键,则该表的数据将存储在与student表相同的节点上
无论如何,这只是所发生事情的简化版本。请随意阅读上面的vNodes链接以及Robbie Strickland的链接。他在IMO中对Cassandra的哈希和分区分发过程进行了最好的描述
因为Cassandra是面向列的DB
这一点已经在堆栈溢出上讨论过了。Cassandra不是一个面向列的数据库。这是一个分区行存储。数据是按行组织和显示的,类似于关系数据库
Cassandra是否遵循水平分区分片
从技术上讲,Cassandra是一个分片数据库,但它几乎从未以这种方式被提及。本质上,每个节点负责特定范围的分区。这些分区标记是一个数值,范围为-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']
当然,一个节点几乎总是负责多个令牌范围
在操作时,分区密钥被散列到令牌中。此标记告诉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主键定义,它被用作分区键。上面的tokenstudentid函数的结果指示哪些分区包含数据
如果有另一个表也使用studentid作为其分区键,则该表的数据将存储在与student表相同的节点上
无论如何,这只是所发生事情的简化版本。请随意阅读上面的vNodes链接以及Robbie Strickland的链接。他在IMO中对Cassandra的散列和分区分发过程进行了最好的描述。您是在谈论扩展吗?缩放和分区
两者都是不同的东西。但是Cassandra支持水平缩放而不是垂直缩放是很好的选择。不,我说的是切分,即分区。基本上,我想知道在Cassandra中是否也对任何列进行了分区,或者对于一个特定的表,所有列都保持在一个节点中,并且只对行进行分区,并使用分区键标识节点?您是在谈论缩放吗?缩放和分区都是不同的事情。但是Cassandra支持水平缩放而不是垂直缩放是很好的选择。不,我说的是切分,即分区。基本上,我想知道在Cassandra中是否也对任何列进行了分区,或者对于特定的表,所有列都保留在一个节点中,只对行进行分区,并使用分区键标识节点?谢谢@Aaron的澄清。这描述了column store和column-family-store之间的良好区别。感谢@Aaron的澄清。这说明了列存储和列族存储之间的良好区别。