質問

連絡先フォームのあるウェブサイトがあります。ユーザーが名前、メール、メッセージを送信すると、サイトから詳細がメールで送信されます。

サーバーでメールシステムに問題が発生することが非常に多いため、ユーザーにエラーが発生し、連絡先の詳細が失われます。 (言うまでもありません。より良いサーバーを入手してください。どのサーバーもメールを時々ダウンさせることができます。そして、多くの投稿を受け取ります。)

メール送信機能がエラーコードを返した場合に、ユーザーの詳細を保存できるシステムを実装したいと思います。その後、送信するたびに、保存されている送信を確認し、送信してみてください。

しかし、データの保存方法

Pythonを使用しているので、 shelve を使用することを考えました-データベース)。または、誰かがより良いデータ形式を提案できますか? (完全なデータベースソリューションは過剰すぎると思います。)

単一ファイルのアプローチで見られる問題は、競合条件です。同時に2つ以上の電子メールが失敗すると、データファイルが2回編集され、データが破損します。

だから何をしますか?マルチファイルソリューション、ファイルロック、または他の何か?

役に立ちましたか?

解決

環境に電子メール送信機能を実装する場合、分離した方法で実行します。たとえば、ユーザーがデータを送信すると、データベースに保存されます。その後、別のサービスを実行して、データベースを照会し、電子メールを送信します。そうすれば、メールサーバーの問題が発生した場合、サービスは後で再試行するだけで、データとユーザーの信頼が失われることはありません。

他のヒント

sqlite を試してください。標準ライブラリにはデフォルトの pythonバインディングがあり、有用なレベルの負荷で機能するはずです。 (またはそう言われます)

提案されているように、これにはsqliteを使用できます。主な質問は次のとおりです。私はこれが機能するのは毎秒数個以下です。そうしないと、データベースファイルが常にロックされ、別の問題が発生します。

しかし、あなたはそれを平易で愚かでシンプルなままにしておくこともできます:ファイルをディスクに書き込む。 すべての送信のために、ファイルは一時ディレクトリに書き込まれます(メールサーバーがダウンしている場合)。次に、ディレクトリを読み取り、メールを送信するメールサーバー起動スクリプトに数行を追加します。データベースやロックの問題はなく、クォータが設定されているディレクトリ(または固定サイズのRAMディスク)を使用している場合、問題は発生しません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top