первичный ключ cassandra, где причина ограничения - PullRequest
2 голосов
/ 07 августа 2020

Я хочу использовать cassandra в качестве БД для хранения сообщений, когда в моей модели сообщения агрегированы по каналам. 3 основных важных поля сообщения:

  1. channel_id
  2. created_by
  3. message_id (уникальный)

Основной API чтения / выборки получать сообщения по каналам, отсортированные по created_by. Кроме того, у меня есть небольшое обновление сообщений channel_id + message_id.

Итак, мой вопрос касается определения primary_key. Если я определю его (channel_id,created_by), смогу ли я выполнить UPDATE с WHERE cLause, например channel_id=X and message_id=XX, даже если message_id не входит в первичный ключ (я даю запросу ключ раздела)?

И если нет, то если я определю первичный ключ, как это (channel_id,created_by, message_id), смогу ли я выполнить чтение с причиной where только с 1 столбцом кластеризации (channel_id,created_by) и выполнить обновление, используя причину where channel_id + message_id?

Спасибо

Ответы [ 2 ]

1 голос
/ 07 августа 2020

определите это (channel_id,created_by) смогу ли я сделать UPDATE с WHERE cLause, например channel_id=X и message_id=XX

Нет. Все компоненты первичного ключа необходимы для операции записи в Cassandra. Сначала вам нужно будет указать created_by. message_id не является частью ключа, поэтому его придется удалить.

А если нет, то если я определю первичный ключ вот так (channel_id,created_by, message_id) смогу ли я сделать читать с WHERE причина только с 1 столбцом кластеризации (channel_id,created_by)

Да, это будет работать:

SELECT * FROM messages WHERE channel_id='1' AND created_by='Aaron';

Это ^ работает, потому что вы предоставили первые два основных ключевые компоненты, не пропуская ни одного. Кассандра может легко найти узел, содержащий раздел для channel_id, и просканировать до строки, начинающейся с created_by.

, и выполнить обновление, используя причину WHERE channel_id + message_id ?

Нет. Опять же, для успешной записи вам потребуется указать created_by.

0 голосов
/ 09 августа 2020

Решение о выборе первичного ключа - одна из самых важных частей в моделировании данных Cassandra. Вам нужно понять таблицу. Я не уверен, что могу помочь вам с предоставленной вами выше информацией. Но я все равно попробую.

Ваше требование:

  1. Сортировать по created_by.
  2. Обновление с channel_id + message_id

Попробуйте использовать channel_id + message_id в качестве ключа раздела и created_by в качестве ключа кластеризации. Message_id в первичном ключе также поможет обеспечить уникальность.

Недавно я нашел курс DS220 по моделированию данных на https://academy.datastax.com/. Это круто.

...