Осторожно с легкими транзакциями (LWT)
Легкие транзакции в настоящее время считаются анти-паттерном Cassandra из-за проблем с производительностью, с которыми вы страдаете.
Вотнемного контекста для объяснения.
Cassandra не использует транзакции RIDBMS ACID с механизмами отката или блокировки.Он не обеспечивает блокировку из-за фундаментального ограничения на все виды распределенного хранилища данных, которое называется CAP Теорема .В нем говорится, что распределенная компьютерная система не может одновременно предоставить все три из следующих гарантий:
- Согласованность (все узлы видят одни и те же данные одновременно)
- Доступность(гарантия того, что на каждый запрос получен ответ о том, был ли он успешным или неудачным)
- Допуск раздела (система продолжает работать, несмотря на произвольную потерю сообщения или отказ части системы)
Из-за этого Cassandra не подходит для атомарных операций, и вам не следует использовать Cassandra для этой цели.
Он обеспечивает легкие транзакции,который может заменить блокировку в некоторых случаях.Но поскольку протокол Paxos (основа для LWT) включает в себя ряд действий, которые происходят между узлами, между узлом, который предлагает LWT, и другими репликами, являющимися частью транзакции, будет несколько циклов.
Это отрицательно влияет на производительность и является одной из причин ошибки WriteTimeoutException.В этой ситуации вы не можете знать, была ли применена операция LWT, поэтому вам нужно повторить ее, чтобы вернуться к стабильному состоянию.Поскольку LWT стоят слишком дорого, драйвер не будет автоматически повторять его для вас.
LTW имеет большие потери производительности, если его часто используют, и мы видим, что у некоторых клиентов возникают проблемы с большим временем ожидания из-за использования LWT.
Легкие транзакции, как правило, являются плохой идеей и должны использоваться нечасто.
Если вам требуются свойства ACID для части вашей рабочей нагрузки, но вам все же требуется масштабировать ее, рассмотрите возможность смещения этой части вашей нагрузки на cochroach BD .Таким образом, если вам нужны транзакции ACID, как правило, гораздо проще внедрить вторую технологию.