其实,PRIMARY KEY是而不是与分区键一样。分区键是PRIMARY KEY的一部分。是的,它是决定如何在整个集群中分布行的部分。
如何在这种情况下通过用户名分配数据?
如果我创建表,插入一些价值观和查询它,我可以通过使用token
功能得到位的一个窗口分配过程我的选择:
> 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
注:通过运行计算范围:
python -c 'print [str(((2**64/5) * i) - 2**63) for i in range(5)]'
还描绘了这样的MVP罗比斯特里克兰的Cassandra High Availability。
Cassandra获取分区键的散列标记值(在这种情况下为user_name
),并使用它来确定将该行显示分配给哪个节点。鉴于上述散列令牌值,而且我列出了范围,这些都是每个用户名应到节点:
Node 1: Helcine, Jebediah
Node 3: Patdard, Robo
Node 5: Bill, Bob, Valentina
根据复制因子(RF),卡珊德拉也可以将额外的复本在其他节点上的每一行。
你可以在这里阅读关于主键和分区键的区别:http://stackoverflow.com/questions/24949676/difference-between-partition-key-composite-key-and-clustering-key-in-cassandra – grzesiekw
请再读一遍我的问题 – farhawa