Question

J'ai un site Web avec un formulaire de contact. L'utilisateur envoie son nom, son email et son message, et le site m'envoie les détails par courrier électronique.

Très occasionnellement, mon serveur a un problème avec son système de messagerie. Ainsi, l'utilisateur reçoit une erreur et ses coordonnées sont perdues. (Ne dites pas: procurez-vous un meilleur serveur. N'importe quel serveur peut voir les courriers électroniques tomber de temps en temps et nous recevons beaucoup de propositions).

Je souhaiterais mettre en place un système permettant de stocker les informations de l'utilisateur si la fonction d'envoi de courrier renvoie un code d'erreur. Ensuite, lors de chaque nouvelle soumission, vérifiez si elle est stockée et essayez de me l'envoyer.

Mais comment stocker les données?

J'utilise python et j'ai donc pensé à utiliser shelve (fichier unique) -base de données). Ou peut-être que quelqu'un pourrait suggérer un meilleur format de données? (Je pense qu'une solution de base de données complète serait excessive.)

Le problème que je vois avec une approche fichier unique est les conditions de concurrence : deux courriels en échec ou plus en même temps provoqueraient deux modifications du fichier de données, ce qui entraînerait une corruption des données.

Alors, que faire? Solution multi-fichier, verrouillage de fichier ou autre chose?

Était-ce utile?

La solution

Lorsque nous implémentons la fonctionnalité d'envoi de courrier électronique dans notre environnement, nous le faisons de manière découplée. Ainsi, par exemple, un utilisateur soumettrait ses données qui seraient stockées dans une base de données. Nous avons ensuite un service séparé qui exécute, interroge la base de données et envoie un courrier électronique. Ainsi, s’il ya des problèmes avec le serveur de messagerie, le service essaiera de nouveau plus tard, les données et la confiance des utilisateurs ne seront jamais perdues.

Autres conseils

essayez sqlite . Il a par défaut liaisons python dans la bibliothèque standard et devrait fonctionner pour un niveau de charge utile (ou alors on me dit)

Vous pouvez, comme suggéré, utiliser sqlite pour cela. La question principale est la suivante: comment est l'homme "beaucoup de soumissions"? Si c’est en dessous de quelques par seconde, cela fonctionnerait. Sinon, le fichier de base de données sera verrouillé tout le temps et vous avez un autre problème.

Mais vous pourriez aussi le garder simple, stupide et simple: écrire des fichiers sur le disque. Pour chaque envoi, un fichier est écrit dans un répertoire temporaire (si le serveur de messagerie est en panne). Ensuite, vous ajoutez quelques lignes au script de démarrage du serveur de courrier électronique qui lit le répertoire et envoie les mails. Pas de base de données, pas de problème de verrouillage et si vous utilisez un répertoire pour lequel un quota est défini (ou un disque mémoire de taille fixe), vous ne devriez pas rencontrer de problèmes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top