Мы используем Cassandra DB в нашем микро-сервисном проекте. В производстве эта услуга развернута в PCF, которую можно масштабировать до 6 экземпляров. У нас есть таблица (TableA) со столбцом (materialSet) в виде замороженного набора. В одном из функционалов параллельные потоки выполняют нижеуказанный функционал (метод синхронизирован) -
- Прочитайте таблицу A, чтобы получить материалSet
- Добавить / удалить материалы, поступающие из запроса в / из набора материалов
- Написать окончательный материал. Установить в таблицу A
С одним экземпляром в более низкой среде обслуживания он работает нормально. Но в производстве, когда обслуживание масштабируется до нескольких экземпляров, результаты в таблице становятся противоречивыми. Причина синхронизации будет работать в той же JVM, но когда служба масштабируется, другие экземпляры работают в другой JVM, и чтение / запись происходят независимо. Есть ли способ решить эту проблему? Я, вероятно, знаю, что это неверная модель данных, которой мы следуем, которая ведет нас к этой проблеме, но мы не можем это изменить.
Есть ли какие-либо способы использования распределенной блокировки на уровне строк в таблице Кассандры ИЛИ как можно добиться более высокой согласованности?