web-dev-qa-db-ja.com

操作する前に、解析したデータを常にデータベースに保存する必要がありますか?

Excelファイルを取得してデータ(php-Excel-reader)を解析し、解析された値をHTMLメールで使用することを含む新しいプロジェクトを開始しようとしています。

私の質問はかなり簡単です。解析されたデータを最初にデータベースに格納し、その後、データを使用することをお勧めしますか?

たとえば、電子メールの送信時にエラーが発生した場合に再解析する必要がないので、私にとってはより理にかなっています。

6
Rob Fyffe

ファイルを解析してデータベースにデータを保存することは良い考えだと思います。

トランザクション履歴が提供されるので、失敗したメッセージを再試行したり、送信されたレコードを監査したり、レポートを提供したりできます。

とはいえ、これらの機能をサポートするための要件が​​なく、将来的にそれらを使用する可能性がない場合、データベースへの書き込みは不必要なオーバーヘッドになるだけです。

2
SpeaksBinary

たとえば、電子メールの送信時にエラーが発生した場合に再解析する必要がないので、私にとってはより理にかなっています。

このような場合、主な決定基準は単純さとパフォーマンスです(これは、実装するプロセスだけでなく、その方法にも依存します)。

たとえば、入力ファイルを再解析するための実行時間がごくわずかで、メール送信エラーが発生した場合にExcelシートの完全なデータが再び必要になる場合、Excelファイルを再度再解析する方がおそらく簡単で高速です。最初にデータベースにデータを保存し、メールを再送信する必要があるときに再度取得するという負担を取りません。同じデータを2回再解析することは、同じ入力から確実に同じ出力が確実に得られ、解析が複雑で非常に遅い変換プロセスを伴わない限り、2回行われるという理由だけで「悪い」わけではありません。

解析自体が最初に修正する必要のあるエラーを表示する可能性がある場合(スプレッドシートに予期された構造がない可能性がありますか?)、またはクリーンアップ手順が含まれる場合、状況は変化し始めます。次に、クリーンアップしたデータ用の追加の中間データストアが必要です。もちろん、それは新しいExcelファイルである可能性があり、それが依然として最も単純な解決策である可能性があります。しかし、他のデータソースからの追加データも統合する必要がある場合、ある種のリレーショナル制約をデータに適用する必要がある場合は、ある種の軽量データベースがより良いソリューションになる可能性があります。

ただし、それぞれがファイル内のデータの異なる部分に基づいて、1つのExcelファイルから1000通の電子メールを生成する必要があると仮定します。メールの送信プロセスでは、5通のメールが戻ってきます。再送信を準備するには、5通の受信者のデータを正確に取得する必要があります。このような場合、データベースを使用して、これらの5人だけに必要なデータを正確に再クエリすることにより、プロセスをより簡単かつ迅速に実行できる可能性が高くなります。また、受信者ごとの送信試行回数などの追加のメタデータを保存する必要がある場合は、データベースによって、このメタデータの追加のテーブルまたは列を導入できる場所が提供されます。

したがって、答えは状況によって異なりますです。データベースは追加のオーバーヘッドをもたらしますが、メリットももたらしますが、これはトレードオフです。そして、今後の要件を十分に理解していない場合は、まずシンプルなアプローチから始めます(おそらく最初はデータベースを使用していません)が、HTML生成でいくつかの中間データ構造が使用されていることを確認してください。これにより、必要な要件を取得したときに、後でデータベースに切り替えることができます。

5
Doc Brown

(PHPでコーディングしているので、Excelファイルがいくつかのブラウザーでアップロードされ、インターネットからアップロードされていると思います。そうでない場合は、私の答えを無視してください)

解析されたデータを最初にデータベースに格納し、その後、データを使用することをお勧めしますか?

そうだと思います。データは信頼できないソース「悪いインターネット」から来ているので、それを解析する注意深く検証データです。

(悪意のあるハッカーが一部のHTTPリクエストを「偽造」し、不正なものを構築する可能性があります)

データベースに、どういうわけかtrusted(悪意のない)データを格納したいとします。

イントラネット(企業の内部)Webアプリケーションでは状況が異なる可能性があります。ユーザーを何らかの方法で信頼でき、データ検証の重要性がやや低くなる可能性があります。

常にコードインジェクションに注意してください。

ビジネスモデルに依存します。このようにしましょう。

処理されたExcelファイルが以前のファイルとは異なる結果を生成する必要がある場合は、保存して、要求に従ってモデルが出力を処理します。

ただし、データが同じデータで同じルーチン(要求)で実行されている場合、サービスの結果セットを使用して、データを処理し、DBに格納します。

0
SmileMZ

1916年頃の非常に古いジョークがあります。嫌がらせを受けた若い中尉が電話でメッセージを伝えたランナーを介して「前進する援軍を送りましょう」というメッセージを送り、最終的には本社で電報を受け取りました。混乱した将軍は「ダンスに行く3ペンスと4ペンスを送ってください」というメッセージを受け取り、正しい変更を正式に送信しました。

Excelは(c *** p APIを使用した)かなりまともなデータストアであり、必要なときに解析するだけです。中間データストアを使用するとバグが発生するだけで、データベースへの書き込みに関連する余分なIOがパフォーマンスの向上につながるのではないでしょうか。

0
James Anderson

エラーが発生した場合にデータベースにデータを保存することで、データを再度解析する必要がないという考えであれば、エラーはまれであり、いずれにしても大ヒットするため、解析に少しの時間を費やす必要はありません。 。一方、データベースファイルが残っていること、変更されていないこと、上書きされていないことを確認する必要があります。不要になった場合は削除する必要があります。あなたはコーディングしなければなりません、あなたはテストしなければなりません、あなたは正しくしなければなりません。特に、これはエラーが発生した場合に正しく機能する必要があるためです。これはテストが難しく、エラーが発生したためです。

Excelファイルを解析するため、パフォーマンスを誰も気にせず、実際にパフォーマンスが得られないとは限らない、まれなケースのために、大量の追加作業を追加します。それは遅くはありません、そしてデータベースはそれほど速くありません。

「時期尚早の最適化」の弊害についての記事がありました。その記事全体では、実際には最適化があると想定していましたが、それはどういうわけか疑わしいものです。エラーが発生した場合のExcelファイルの再解析が遅すぎると誰かが実際に不平を言ったことがありますか?

0
gnasher729