Кассандра обрезать производительность - PullRequest
0 голосов
/ 07 января 2019

Мне недавно сказали, что урезание Кассандры не является производительным, и это анти паттерн. Но я не знаю, почему?

Итак, у меня есть 2 вопроса:

  • Производительнее ли использовать все записи, чем выполнять усечение?

  • Создает ли операция усечения надгробия?

Кассандра Версия: 3.x

1 Ответ

0 голосов
/ 07 января 2019

Из документов Кассандры:

Примечание: TRUNCATE отправляет команду JMX всем узлам, сообщая им удалить таблицы SSTable, которые содержат данные из указанной таблицы. Если какой-либо из эти узлы не работают или не отвечают, команда не работает и выводит сообщение наподобие следующего

Таким образом, запуск truncate приведет к удалению всех sstables, принадлежащих вашей таблице cassandra, что будет довольно быстрым, но должно быть подтверждено всеми узлами. В зависимости от вашего cassandra.yml это будет снимать ваши данные раньше:

auto_snapshot (по умолчанию: true) Включить или отключить отображение снимка Взятые данные перед усечением или удалением таблиц. к Во избежание потери данных настоятельно рекомендуется использовать настройку по умолчанию. Если если установлено значение false, вы потеряете данные при усечении или отбрасывании.

При создании или изменении таблиц вы включаете или отключаете кеш ключей (кеш ключа раздела) или кеш строк для этой таблицы, установив параметр кеширования. Другие настройки и настройки кэша строк и ключей параметры устанавливаются на глобальном (узловом) уровне. Кассандра использует эти настройки для автоматического распределения памяти для каждой таблицы на узле на основе общей рабочей нагрузки и конкретного использования таблицы. Вы также можете настроить периоды сохранения для этих кэшей глобально.

К вашему вопросу:

  • upserts будет намного медленнее (когда в вашей таблице значимые данные)
  • truncate вообще не пишет надгробий (вместо этого он сразу удаляет все на всех узлах для ваших усеченных таблиц sstables немедленно)
...