Запись в Cassandra и обновление базы данных Mongo с помощью весенней партии - PullRequest
0 голосов
/ 30 апреля 2018

У нас есть существующее приложение, которое использует пружинную партию. В соответствии с новым требованием нам нужно записать строку в cassandra db, прочитав ее из mongo db, а затем обновив столбец состояния в mongo db до true, что означает, что строка обработана.

Я использую библиотеку driver-cassandra-core для записи данных в Cassandra и spring-data-mongodb для обновления данных в базе данных mongo.

Так что теперь я думаю записать данные на cassandra, а затем обновить статус в mongo в ItemWriter (spring-batch), который, я думаю, должен хорошо работать в счастливом сценарии.

Но я не уверен, что это работает хорошо, если что-то не так с приложением, например, если db (cassandra или mongo) выходит из строя, или приложение выходит из строя во время обработки и т. Д. Поэтому я хочу добавить здесь менеджер транзакций, чтобы убедиться, что приложение способно откатить строки, которые не находятся в согласованном состоянии. Я видел, что можно добавить менеджер транзакций, как это ниже:

https://docs.spring.io/spring-batch/trunk/reference/html/configureStep.html#configuringAStep

Но я не уверен, поскольку я использую две разные базы данных No SQL, возможно ли заставить этот диспетчер транзакций работать?

Может кто-нибудь, пожалуйста, дайте мне знать, как правильно справиться с такой ситуацией?

PS : Просто для обновления очень важно, чтобы приложение синхронизировало статус cassandra и mongo, т.е. если приложение записывает данные в cassandra, то соответствующий статус строки должен обновляться в монго.

1 Ответ

0 голосов
/ 30 апреля 2018

Я не могу говорить с Кассандрой, но я верю, что MongoDB не будет участвовать в транзакции, управляемой PlatformTransactionManager. Из-за этого вам понадобится использовать слушатели для реализации компенсирующей логики для эмуляции отката. Я бы предложил использовать CompositeItemWriter для записи в оба источника данных, а затем ChunkListener#afterChunkError для реализации компенсирующей логики для эмуляции отката при ошибке.

...