2

お問い合わせフォームのあるウェブサイトを持っています。ユーザーが名前、電子メール、メッセージを送信すると、サイトから詳細が電子メールで送信されます。

非常にまれに、サーバーの電子メール システムに問題があるため、ユーザーにエラーが発生し、連絡先の詳細が失われます。(言わないでください:より良いサーバーを入手してください。どのサーバーでも時々メールがダウンする可能性があり、多くの提出があります)。

メール送信機能がエラーコードで戻ってきた場合に、ユーザーの詳細を保存できるシステムを実装したいと考えています。それ以降の送信ごとに、保存されている送信を確認し、それらを私に送信してみてください。

しかし、データを保存する方法は?

私はpythonを使用しているので、shelve(単一ファイルの半データベース)を使用することを考えました。それとも、誰かがより良いデータ形式を提案できますか? (完全なデータベース ソリューションはやり過ぎだと思います。)

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

じゃあ何をすればいいの?マルチファイル ソリューション、ファイルのロック、または何か他のものですか?

4

3 に答える 3

8

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

于 2009-01-12T16:40:21.457 に答える
4

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

于 2009-01-12T16:35:29.000 に答える
2

提案されているように、これにはsqliteを使用できます。主な質問は次のとおりです。「多くの提出物」はどのように人間ですか?私はこれがうまくいくだろう毎秒数未満です。そうしないと、データベースファイルが常にロックされ、別の問題が発生します。

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

于 2009-01-12T16:57:17.507 に答える