На самом деле, PRIMARY KEY не так же, как и ключ раздела. Ключ раздела является частью ПЕРВИЧНОГО КЛЮЧА. И да, именно эта часть определяет, как строка распределяется по кластеру.
Каким образом данные будут распределены по имени пользователя в этом случае?
Если я создам таблицу, вставить некоторые значения и запросить его я могу получить немного окна в процесс распределения с помощью функции token
в моем SELECT:
> 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 узлов. В Кассандре каждый узел отвечает за диапазон первичных маркеров. Давайте предположим следующее:
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
В зависимости от вашего фактора репликации (РФ), Cassandra может также разместить дополнительные копии каждой строки на других узлах.
Вы можете прочитать о различии между основным ключом и ключом раздела здесь: http://stackoverflow.com/questions/24949676/difference-between-partition-key-composite-key-and-clustering-key-in-cassandra – grzesiekw
Пожалуйста, снова прочитайте мой вопрос – farhawa