Como evitar a perda de dados em um aplicativo .NET devido a uma falha de energia repentina?

StackOverflow https://stackoverflow.com/questions/736712

  •  09-09-2019
  •  | 
  •  

Pergunta

Estamos desenvolvendo uma aplicação RetailPOS .net (windows).

Um dos cliente pergunta 'O que acontecerá com os dados atuais que estão sendo processados ??na aplicação quando um poder disparou de repente?', 'Será que a aplicação capaz de recuperar os dados não salvos?'

Eu estou querendo saber, como esse recurso pode ser incluídas no pedido de .net?

Pode alguns me ajuda, o que precisa ser feito para isso?

Foi útil?

Solução

Em primeiro lugar, olhar para um UPS (un-interuptable fonte de alimentação)

Em segundo lugar, olhar para a criação de transações persistentes, as transações que irá poupar cedo e muitas vezes, mas não comprometer até que você diga a ele. Isto vai um pouco além das operações típicas em TSQL.

Outras dicas

Se é um corte de energia duro (como a bateria removida em um laptop, enquanto desconectado), então não há muito que você pode fazer diferente de gravação para o disco todo. degrau. do. a. caminho. (Discussão sobre um acerto de desempenho.) E também certificar-se de que você tem algo gravado para deixar o know aplicativo quando ele começa a voltar-se o que estava no meio de fazer antes, por isso pode continuar, ou repita a operação.

Se é um corte de energia, como o botão de energia que está sendo pressionado para desligar / sleep / hibernate o computador, em seguida, ouvir o evento SystemEvents.PowerModeChanged e agir em conformidade.

Por fim, certifique-se de que, se os seus dados seriam corrompidos se a meio caminho gravados em um banco de dados, verifique se as gravações de banco de dados são atômicas (ou todas as mudanças acontecem e são aceitos, ou nenhum deles é).

Você pode acrescentar a informação atual que está sendo recebida para o sistema de arquivos. Vai ser um acerto de desempenho, mas irá permitir que você voltar para o último item que está sendo capturado.

Quando o aplicativo é iniciado detectar se há um arquivo pendente, e fornecer a opção para recuperar. Carregar os dados guardados no arquivo de forma adequada.

Uma vez que você tem todas as informações, quando você está fazendo o processo que acontece quando o pagamento, certifique-se de gravar quaisquer alterações significativas no processo atomicamente. Se você está batendo sistemas externos, gravar quando você está iniciando a operação e quando se trata de volta imediatamente. No exemplo acima, há sempre uma janela de tempo em que ele pode falhar, mas você quer mantê-lo o mais curto possível e ter informação suficiente para que os processos de recuperação. Na pior das hipóteses, se o sistema não pode se recuperar automaticamente, você quer que ele tem informações suficientes para determinar onde no processo parou.

O que você realmente quer são atômicas sobre as operações de disco. Há muitas maneiras de realizar estes, mas muitas vezes se você estiver usando um produto de banco de dados existente será feito para você.

Se você rolou seus próprios bancos de dados ou formatos de arquivo, você tem algum trabalho cortar o nosso para você dependendo do seu formato de arquivo.

classe PowerFailureException vai resolver isso. Na verdade, apenas manter o poder com uma UPS. A única outra opção realmente é manter a atomicidade para transações de banco de dados.

Você pode querer considerar ter seu uso aplicação SQLite .

Eles têm alguma grande informação sobre a sua quando usar página .

Alguns pontos que se destacam são:

  • Atualizações acontecer atomicamente como conteúdo do aplicativo é revisto

  • O conteúdo é atualizado continuamente e atomicamente para que não haja nenhum trabalho perdidos no caso de uma falha de energia ou acidente.

Eu estou procurando uma opção semelhante para uma aplicação que eu estou indo para implementar que será utilizado em um país do terceiro mundo onde o poder sai freqüentemente durante todo o dia .... até agora SQLite parece destacar-se como um boa escolha possível.

Mas, ao final do dia, a sua escolha vai depender de suas circunstâncias e necessidades individuais.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top