Как предотвратить потерю данных в приложении .net из-за внезапного сбоя питания? - PullRequest
0 голосов
/ 10 апреля 2009

Мы разрабатываем приложение RetailPOS .net (windows).

Один из клиентов спрашивает: «Что произойдет с текущими данными, обрабатываемыми в приложении, когда внезапно отключится питание?», «Сможет ли приложение восстановить несохраненные данные?»

Мне интересно, как эту функцию можно включить в приложение .net?

Может ли кто-нибудь мне помочь, что для этого нужно сделать?

Ответы [ 6 ]

4 голосов
/ 10 апреля 2009

Сначала посмотрите на ИБП (источник бесперебойного питания)

Во-вторых, посмотрите на создание постоянных транзакций, транзакций, которые будут сохраняться рано и часто, но не фиксируются, пока вы не скажете это. Это выходит за рамки типичных транзакций в TSQL.

1 голос
/ 10 апреля 2009

Вы можете добавить текущую информацию, полученную в файловую систему. Это будет удар по производительности, но позволит вам вернуться к последнему захваченному предмету.

Когда приложение начинает обнаруживать, есть ли ожидающий файл, и предоставить возможность восстановления. Загрузите данные, сохраненные в файле, соответственно.

Когда у вас есть вся информация, когда вы выполняете процесс, который происходит при оплате, обязательно записывайте любые существенные изменения в процессе атомарно. Если вы используете внешние системы, запишите, когда вы запускаете операцию и когда она сразу возвращается. В приведенном выше примере всегда есть окно, когда он может дать сбой, но вы хотите, чтобы он был как можно более коротким и имел достаточно информации для процессов восстановления. В худшем случае, если система не может автоматически восстановиться, вы хотите, чтобы у нее было достаточно информации, чтобы определить, где в процессе она остановилась.

1 голос
/ 10 апреля 2009

Если это жесткое отключение питания (например, аккумулятор, извлеченный из ноутбука, когда он отключен от сети), то вы ничего не можете сделать, кроме как записать на диск каждый. шаг. из. . путь. (Поговорим о снижении производительности.) А также убедитесь, что у вас есть что-то записанное, чтобы приложение узнало, когда оно запускает резервную копию того, чем оно занималось ранее, чтобы оно могло либо продолжить, либо повторить операцию.

Если происходит отключение питания, например нажатие кнопки питания для выключения / отключения / спящего режима компьютера, затем прослушайте событие SystemEvents.PowerModeChanged и действуйте соответствующим образом.

Наконец, убедитесь, что если ваши данные будут повреждены, если они наполовину записаны в базу данных, убедитесь, что записи в вашей базе данных являются атомарными (либо все изменения происходят и принимаются, либо ни одно из них).

0 голосов
/ 25 сентября 2013

Возможно, вы захотите использовать приложение SQLite .

У них есть отличная информация об их , когда использовать страницу .

Некоторые моменты, которые выделяются:

  • Обновления происходят атомарно при пересмотре содержимого приложения

  • Содержимое обновляется непрерывно и атомарно, чтобы не было потери работы в случае сбоя питания или сбоя.

Я ищу аналогичную опцию для приложения, которое собираюсь внедрить, и которое будет использоваться в стране третьего мира, где мощность часто отключается в течение дня .... до сих пор SQLite, похоже, выделяется хороший возможный выбор.

Но в конечном итоге ваш выбор будет зависеть от ваших индивидуальных обстоятельств и требований.

0 голосов
/ 10 апреля 2009

Что вы действительно хотите, так это атомарные транзакции на диске. Есть много способов сделать это, но часто, если вы используете существующий продукт базы данных, это будет сделано для вас.

Если вы свернули свою собственную базу данных или форматы файлов, у вас есть некоторые работы, которые вам подойдут в зависимости от формата файла.

0 голосов
/ 10 апреля 2009

Класс PowerFailureException решит эту проблему. На самом деле просто поддерживать питание с помощью ИБП. Единственный другой вариант - поддерживать атомарность транзакций базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...