2009-04-10 18 views
0

Nous développons une application RetailPOS .net (windows). L'un des clients demande «Qu'adviendra-t-il des données actuelles traitées dans l'application lorsqu'une coupure de courant se produira soudainement?», «L'application sera-t-elle capable de récupérer les données non enregistrées?Comment empêcher la perte de données dans une application .net en raison d'une coupure de courant soudaine?

Je me demande comment cette fonctionnalité peut être incluse dans l'application .net? Peut-on m'aider, que faut-il faire pour cela?

Répondre

4

D'abord, regardez dans un onduleur (alimentation non interuptable)

Deuxièmement, examiner la création d'opérations persistantes, les transactions qui sauveront tôt et souvent, mais pas commettre jusqu'à ce que vous lui dites. Cela va un peu au-delà des transactions typiques dans TSQL.

0

La classe PowerFailureException résoudra cela. En fait, il suffit de maintenir la puissance avec un onduleur. La seule autre option est vraiment de maintenir l'atomicité pour les transactions de base de données.

1

S'il s'agit d'une coupure de courant difficile (comme la batterie retirée sur un ordinateur portable lorsqu'il est débranché), vous ne pouvez rien faire d'autre que d'écrire sur le disque chaque fois. étape. de. la. façon. (Parlez d'un coup de performance.) Et assurez-vous également que vous avez enregistré quelque chose pour que l'application sache quand elle redémarre ce qu'elle était en train de faire avant, pour qu'elle puisse continuer, ou réessayer l'opération. S'il s'agit d'une coupure de courant, comme si le bouton d'alimentation était enfoncé pour arrêter/mettre en veille/hibernation l'ordinateur, alors écoutez l'événement SystemEvents.PowerModeChanged et agissez en conséquence. Enfin, assurez-vous que si vos données sont corrompues si elles sont écrites à mi-chemin dans une base de données, assurez-vous que les bases de données sont atomiques (soit toutes les modifications sont acceptées, soit aucune).

0

Ce que vous voulez vraiment, ce sont des transactions atomiques sur disque. Il existe plusieurs façons d'effectuer ces opérations, mais souvent, si vous utilisez un produit de base de données existant, cela sera fait pour vous.

Si vous avez roulé votre propre base de données ou formats de fichiers, vous avez du travail à faire pour vous en fonction de votre format de fichier.

1

Vous pouvez ajouter les informations actuelles reçues au système de fichiers. Ce sera un coup de performance, mais cela vous permettra de revenir au dernier objet capturé. Lorsque l'application commence à détecter s'il existe un fichier en attente et fournir l'option à récupérer. Chargez les données enregistrées dans le fichier de manière appropriée.

Une fois que vous avez toutes les informations, lorsque vous effectuez le processus qui se passe lors du paiement, assurez-vous d'enregistrer tous les changements significatifs dans le processus de manière atomique. Si vous frappez des systèmes externes, enregistrez quand vous lancez l'opération et quand elle revient immédiatement. Dans ce qui précède, il y a toujours une fenêtre de temps où il peut échouer, mais vous voulez le garder aussi court que possible et avoir suffisamment d'informations pour les processus de récupération. Dans le pire des cas, si le système ne peut pas récupérer automatiquement, vous voulez qu'il ait suffisamment d'informations pour déterminer où il s'est arrêté au cours du processus.

0

Vous voudrez peut-être envisager d'utiliser votre application SQLite.

Ils ont de bonnes informations sur leur when to use page.

Quelques points qui se démarquent sont:

  • mises à jour se produisent atomiquement comme contenu de l'application est révisée

  • Le contenu est mis à jour en permanence et atomiquement afin qu'il n'y ait pas de travail perdu en cas de une panne de courant ou un accident.

Je suis à la recherche d'une option similaire pour une application que je vais mettre en œuvre qui sera utilisé dans un pays du tiers monde où le pouvoir sort souvent toute la journée .... jusqu'à présent SQLite semble ressortir comme un bon choix possible. Mais à la fin de la journée, votre choix dépendra de vos circonstances et exigences individuelles.