Представьте загрузку файла на Amazon S3, и при успешном расположении файла (и метаданных) будет сохранено в записи в ElasticSearch. Хорошо, отлично.Как сохранить данные согласованными? (Amazon S3 и ElasticSearch)
Но, как вы обеспечить согласованность данных (ACID?), Если один из запроса не может ... Например, если услуга ElasticSearch является unavailible
- файл на S3 должен быть удален
- , но что делать, если удаление на S3 не выполнено
Это приведет к несогласованному состоянию.
Итак, вопрос в том, как вы храните эти экземпляры в синхронизации?
Идеи:
- Если есть несогласованное состояние, и пользователь запрашивает запись ElasticSearch и ничего не найдено запись в S3 удаляется. (meeh)
- Пакетные задания для поиска БД для несоответствий и их удаления.
- Выполнить оба запроса в транзакции в базе данных, и если один терпит неудачу -> Откат и повторите попытку позже (очередь, работа = Overkill?)