Полагаю, Cassandra
не предоставляет возможности отката.В моем сценарии часть данных должна быть записана в 2 разные базы данных (User
и Address
).
Например, скажем, я добавляю информацию о пользователе.У него есть их имя, адрес.Я хочу разбить эту часть информации на две части, чтобы я мог запросить пользователя на основании его идентификатора электронной почты и его страны.Поэтому я создам две базы данных (по одной для каждого типа запроса) и буду использовать email id
и country
в качестве ключей раздела.
Проблема, с которой я могу столкнуться, заключается в том, что (1) пользователь создает профиль (HTTP-запрос свся информация, связанная с пользователем) (2) Я делаю запрос Кассандры в базу данных User
, чтобы добавить часть информации в базу данных user
(электронная почта, имя) (3) Я делаю другой запрос Кассандры, чтобы добавить информацию об адресе в Address
база данных.
Теперь, если шаг 3 не пройден, мне нужно откатить шаг 2. Поскольку Кассандра не делает этого, мне придется написать код.Но нет никакой гарантии, что мой откат для шага 2 будет успешным!
Для обработки таких сценариев, я полагаю, логика должна быть в дизайне приложения, а не в коде.Как вы думаете, я должен разработать приложение?Я думаю, что
1) создать Master
базу данных, которая содержит всю информацию (электронный идентификатор ключа раздела).Когда поступает запрос пользователя, заполняется только эта база данных.Для каждой строки есть поле, которое сообщает, были ли распределены данные в строке или нет.Пользователь получает подтверждение, если данные добавляются в Master
2) Другой отдельный процесс отвечает за сбор строк (помеченных как нераспределенные) и добавление их данных в две базы данных User
и Master
.Я мог бы реализовать логику обеспечения согласованности данных в этом процессе (скажем, данные добавляются сначала в User
, затем Master
и distributed field in
Master gets set to
true`, если обе операции успешны. Так как это отдельный бэкэнд-процессЯ могу сделать столько попыток, сколько захочу, не беспокоясь о том, что пользователь ждет подтверждения.
Что вы думаете?