Кассандра - обрезать таблицу во время вставки - PullRequest
1 голос
/ 06 января 2020

Я хочу понять, как работает команда truncate в Cassandra (версия 3.9), чтобы узнать, что произойдет в следующем сценарии:

  • У меня есть около 100 ГБ данных на рабочий стол в таблице, которую нужно усечь.
  • Я хочу усечь эту таблицу, но в то же время будет несколько сотен запросов в секунду, которые будут выполнять вставки одновременно.

Я пытаюсь теоретически понять, как бы это закончилось.

  • Будет ли truncate пытаться получить какой-либо замок на столе, прежде чем он сможет продолжить? и, возможно, остановит запросы на вставку или сам по себе истечет время ожидания?
  • Или будет truncate go последовательно по мере поступления запроса и следующих запросов на вставку создаст дополнительные строки, и я получу в итоге после усечения осталось небольшое количество строк.

Я просто пытаюсь освободить место, поэтому меня не особенно беспокоит, остается ли небольшой объем данных из запросов на вставку, выполняемых после команды усечения.

Я просто пытаюсь понять, ожидаете ли вы, что это завершится успешно, или это не получится / истекло время ожидания.

Я попытаюсь запустить аналогичный сценарий на меньшем кластере, но Я не уверен, что это будет хорошей заменой, чтобы понять реальное поведение. Любые материалы будут полезны.

Ответы [ 2 ]

0 голосов
/ 08 января 2020

Я попробовал это для себя. В двухузловом кластере Cassandra я сделал вставки со скоростью около 160 запросов в секунду в фоновом режиме и выполнил усеченный запрос к той же таблице, в которой было около 200 000 записей.

  • Таблица была усечена, и вставки продолжились без ошибок.
  • Новые строки, вставленные после усечения, отображаются в БД.
0 голосов
/ 06 января 2020

Truncate отправляет сообщение всем узлам с просьбой удалить все SSTables в момент выполнения, у вас будет информация только о тех upserts, полученных после того, как усеченное было выпущено.

В Datastax документация указано, что это делается с помощью JMX, но, глядя на комментарии этого ответа , это делается с помощью CQL и службы сообщений.

Если вы пытаясь освободить место на диске, обратите внимание, что снимок будет создан с усечением, если для auto_snapshot установлено значение true (значение по умолчанию), поэтому вам потребуется удалить снимок после выполнения команды. Также обратите внимание, что truncate потребует, чтобы все узлы были исправны и работали.

...