Indexing 分区键是如何工作的?

Indexing 分区键是如何工作的?,indexing,cassandra,primary-key,database-partitioning,Indexing,Cassandra,Primary Key,Database Partitioning,我是Cassandra的新手,我读到主键和分区键是一样的 我的问题很简单,在这种情况下: CREATE TABLE users ( user_name varchar PRIMARY KEY, password varchar, gender varchar, session_token varchar, state varchar, birth_year bigint ); 由于分区键负责跨节点分发数据,因此在这种情况下,用户名如何分发数据?实际上,主键与分区键不同。

我是Cassandra的新手,我读到主键和分区键是一样的

我的问题很简单,在这种情况下:

CREATE TABLE users (
  user_name varchar PRIMARY KEY,
  password varchar,
  gender varchar,
  session_token varchar,
  state varchar,
  birth_year bigint
);

由于分区键负责跨节点分发数据,因此在这种情况下,
用户名如何分发数据?

实际上,主键与分区键不同。分区键是主键的一部分。是的,它是决定一行如何在集群中分布的部分

在这种情况下,将如何按用户名分发数据

如果我创建您的表,插入一些值并查询它,我可以通过使用我的选择中的
标记
函数,在分发过程中获得一点窗口:

> SELECT token(user_name), user_name FROM user2;

 system.token(user_name) | user_name
-------------------------+-----------
    -5077180869401877077 |   Patdard
    -4874582970682694928 |      Robo
     4639906948852899531 |      Bill
     4645660266327417866 |       Bob
     4877648712764681009 | Valentina
     5726383012007749221 |   Helcine
     7724711996172375448 |  Jebediah

(7 rows)
假设我有5个节点。在Cassandra中,每个节点负责一个主令牌范围。让我们假设如下:

1)  5534023222112865485 to -9223372036854775808
2) -9223372036854775807 to -5534023222112865485
3) -5534023222112865484 to -1844674407370955162
4) -1844674407370955161 to  1844674407370955161
5)  1844674407370955161 to  5534023222112865484
注:通过运行计算的范围:

在MVP Robbie Strickland的作品中也有这样的描述

Cassandra获取分区键的散列标记值(
user\u name
,在本例中),并使用该值确定将显示的行分发到哪个节点。给定上面的哈希标记值和我列出的范围,这些是每个用户名应该指向的节点:

Node 1: Helcine, Jebediah
Node 3: Patdard, Robo
Node 5: Bill, Bob, Valentina

根据您的复制因子(RF),Cassandra还可以在其他节点上放置每行的其他副本

实际上,主键与分区键不同。分区键是主键的一部分。是的,它是决定一行如何在集群中分布的部分

在这种情况下,将如何按用户名分发数据

如果我创建您的表,插入一些值并查询它,我可以通过使用我的选择中的
标记
函数,在分发过程中获得一点窗口:

> SELECT token(user_name), user_name FROM user2;

 system.token(user_name) | user_name
-------------------------+-----------
    -5077180869401877077 |   Patdard
    -4874582970682694928 |      Robo
     4639906948852899531 |      Bill
     4645660266327417866 |       Bob
     4877648712764681009 | Valentina
     5726383012007749221 |   Helcine
     7724711996172375448 |  Jebediah

(7 rows)
假设我有5个节点。在Cassandra中,每个节点负责一个主令牌范围。让我们假设如下:

1)  5534023222112865485 to -9223372036854775808
2) -9223372036854775807 to -5534023222112865485
3) -5534023222112865484 to -1844674407370955162
4) -1844674407370955161 to  1844674407370955161
5)  1844674407370955161 to  5534023222112865484
注:通过运行计算的范围:

在MVP Robbie Strickland的作品中也有这样的描述

Cassandra获取分区键的散列标记值(
user\u name
,在本例中),并使用该值确定将显示的行分发到哪个节点。给定上面的哈希标记值和我列出的范围,这些是每个用户名应该指向的节点:

Node 1: Helcine, Jebediah
Node 3: Patdard, Robo
Node 5: Bill, Bob, Valentina

根据您的复制因子(RF),Cassandra还可以在其他节点上放置每行的其他副本

您可以使用
nodetool getendpoints
检查数据的放置位置

下面是一个简单的例子

我正在使用here
ccm
创建集群-

我将使用具有以下键空间配置的表用户:

CREATE KEYSPACE test_user WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
因此将有3个副本

首先,我创建了具有5个节点的集群:

> ccm create -v 3.2 -n 5 test
启动它们:

> ccm start
并检查我的群集是否已启动并正在运行:

> ccm status                                   

Cluster: 'test'
---------------
node1: UP
node3: UP
node2: UP
node5: UP
node4: UP
现在,我可以使用
nodetool getendpoints
检查数据放置的位置:

> ccm node1 nodetool getendpoints test_user users john;    

127.0.0.1
127.0.0.2
127.0.0.3
《约翰》将在127.0.0.1、127.0.0.2、127.0.0.3播出

> ccm node1 nodetool getendpoints test_user users tom; 

127.0.0.3
127.0.0.4
127.0.0.5

“tom”将出现在127.0.0.3、127.0.0.4、127.0.0.5上。

您可以使用
nodetool getendpoints查看数据的放置位置

下面是一个简单的例子

我正在使用here
ccm
创建集群-

我将使用具有以下键空间配置的表用户:

CREATE KEYSPACE test_user WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 3};
因此将有3个副本

首先,我创建了具有5个节点的集群:

> ccm create -v 3.2 -n 5 test
启动它们:

> ccm start
并检查我的群集是否已启动并正在运行:

> ccm status                                   

Cluster: 'test'
---------------
node1: UP
node3: UP
node2: UP
node5: UP
node4: UP
现在,我可以使用
nodetool getendpoints
检查数据放置的位置:

> ccm node1 nodetool getendpoints test_user users john;    

127.0.0.1
127.0.0.2
127.0.0.3
《约翰》将在127.0.0.1、127.0.0.2、127.0.0.3播出

> ccm node1 nodetool getendpoints test_user users tom; 

127.0.0.3
127.0.0.4
127.0.0.5

“tom”将出现在127.0.0.3、127.0.0.4、127.0.0.5上。

您可以在此处阅读主键和分区键之间的差异:请再次阅读我的问题您可以在此处阅读主键和分区键之间的差异:请再次阅读我的问题