"Кроме того, могут быть потери питания, которые не завершают работу приложения корректно, поэтому любое решение должно иметь постоянный кэш, который может выдержать циклы питания."
У вас уже есть решение в головес Hibernate кеш уровня 2.Но вы не сказали, каковы реальные требования.У вас нереальная сеть.Это нормально, у вас нереальный источник питания.Тоже норм.Теперь какой уровень сервиса вы хотите достичь?Что приемлемо или нет?
Допустима ли потеря данных?Сколько вы могли бы принять?Какой риск вы принимаете?
Чтобы быть более точным, допустим, у вас есть локальная реплика базы данных или, по крайней мере, ее часть.Допустим, вы знаете, как поставить в очередь / сохранить изменения, сделанные локально.Допустим, вы храните эти модификации на жестком диске, чтобы быть в безопасности в случае сбоя питания.Допустим, вы можете объединить изменения с основной базой данных, когда соединение снова станет доступным.
Это уже много предположений.Хорошо, но что произойдет, если один жесткий диск выйдет из строя после сбоя питания?Вы знаете, что жесткий диск не любит сбой питания и может быть поврежден при сбое питания или даже может быть поврежден?
Итак, вы установили RAID и добавили источник бесперебойного питания.Это мило.Вы обнаружите событие сбоя питания от ОС.Завершите текущую транзакцию и корректно завершите работу.RAID защищает вас от сбоя диска.
Хорошо, но что произойдет, если весь компьютер перестанет работать?Что происходит в случае пожара?Или повреждение водой?Все диски будут управляться, данные не будут восстановлены, а то, что не синхронизировано с центральной базой данных, будет потеряно.Это приемлемо или нет?
Даже при включенном вайфай, блок питания работает отлично ... Какова надежность центральной базы данных в любом случае?У вас есть регулярные резервные копии?Или кластерное решение?Вы уверены, что ваша центральная база данных надежна в любом случае?
С точки зрения базы данных легко использовать кластер или резервное копирование и использовать транзакции для обеспечения согласованности данных.Вы все еще можете потерять данные (если не используете кластер в частности), но вы сможете восстановить до последней резервной копии, например.
Но если вы хотите работать в автономном режиме (база данных недоступна),и вы не единственный, кто может изменять базу данных, конфликты БУДУТ возникать.Это больше не кеш, спящий режим или какая-либо техническая проблема.
Это функциональная проблема.Что делать, если несколько модификаций происходит в автономном режиме и вам нужно объединить?Что приемлемо?Что не является.Это может быть то, что при повторном подключении применяются самые последние изменения, более старые изменения отбрасываются.Или же обнаруживаются конфликты и пользователю предлагается разобраться с ними.Вы можете попытаться применить изменения в очереди и применить их все ...
Я бы посчитал, что вы можете предложить "автономный режим", но ваши пользователи должны знать, что они не в сети, и должны иметь уведомлениекогда изменение делается постоянным в центральной базе данных с возможным разрешением конфликта.Но это моя точка зрения.