1

ユーザーが記事を入力して画像をアップロードする、記事ベースの Web サイトを開始する予定です。

どうすればデータを保存できるのか、少し混乱しています。データベース内、またはファイル システムを .txt ファイルまたは .html ファイルとして使用するか、その他の手段で使用します。最初は共有サーバーでサイトを実行する予定だったので、データベースにデータを保存するのは少し恥ずかしかったです。共有サーバーの容量は巨大なコンテンツに対して十分でしょうか? それとも、コンテンツを別の .txt ファイルまたは .html ファイルとして保存することをお勧めしますか?

考慮事項:

  1. 記事タイトルのみの検索機能を採用。そして、記事のタイトルがデータベースに保存されます。検索機能は、記事のコンテンツには拡張されません。
  2. 私は WYSIWYG エディターを使用して、寄稿者がコンテンツをフォーマットできるようにする予定です。したがって、保存されたデータには HTML コードが含まれることは明らかです。データベースへの XSS 攻撃なので、コンテンツをファイル システムに格納することは安全ですが、この点は本当ですか?
  3. 画像はデータベースではなく、ファイル システムに保存されます。

a. その際、XSS攻撃を防ぐために集中すべきポイントは何ですか?

b. データベースに保存することが推奨される解決策である場合、データ型は何ですか? テキストまたはロングテキスト?

4

2 に答える 2

2

これは、私が考えることができる 2 つの最も一般的なソリューションです。

  1. すべてをデータベースに格納します。
  2. 「小さな」データをデータベースに格納し、すべての添付ファイル (JPEG や PDF などのバイナリ ファイル) をデータベースの外部にあるファイル システムに格納します。

どちらのソリューションにも利点と欠点があります。

解決策 #1: すべてをデータベースに保存する

利点:

  • 一部の (強力な) データベースでは、PDF などの一般的なファイル形式のコンテンツを索引付け (検索) することもできます ( Oracle interMediaはその例です)。
  • データの整合性を簡単に確保できます。
  • データのセキュリティを簡単に確保できます。

欠点:

  • データベース/テーブルのメンテナンスをまったく行わないと、データベースが巨大になり、非常に遅くなる可能性があります。
  • デバッグのためにバイナリ コンテンツを「参照」するのが難しくなる可能性があります。
  • プロジェクトに巨大なデータベースがあり、多くのユーザーが読み書きしている場合は、特にデータベース/テーブルのメンテナンスを実行する必要があります。
  • データベースのバックアップは、実行と復元が難しい場合があります。
  • Web アプリケーションでファイルを提供するのが難しい場合があります (ファイルを正しく提供するには、MIME タイプを知る必要があります)。

解決策 2 - 「小さな」データをデータベースに保存し、データベース外のすべての添付ファイルをファイル システムに保存します。

利点:

  • ファイルの HTTP キャッシングは、いくらか簡単に実行できます。
  • ファイルを簡単に参照できます (デバッグなどのために)。
  • 特別なことをしなくても、スピーディーなシステムを簡単に維持できます。

欠点:

  • ファイルシステム上のファイルをデータベース内のエンティティにリンクする関係テーブルを作成して維持する必要があります。
  • データの整合性を実際に確保することはできません (ファイルがファイル システム上で手動で削除されたが、データベースにまだ存在している場合はどうなるでしょうか?)。
  • セキュリティは、多くのレベルで確保する必要があります。

これは私が考えることができるものの簡単な概要です。どちらのソリューションも優れたものになる可能性があります。プロジェクトを使用するユーザーの数と、利用可能なハードウェアに大きく依存します。

共有環境は通常あまり強力ではないため、共有環境の場合はおそらく #2 を使用します。

于 2013-10-02T16:04:19.010 に答える
1

現在、同じ問題に直面しました。私は何百万ものプロファイルを持っており、すべてのプロファイルには膨大なデータが含まれています。サイトのパフォーマンスが低下するため、リレーショナル データベースに巨大なデータを格納することはお勧めしません。このソリューションをお勧めします。

  1. 検索に必要なデータをデータベースに保存し、Web サイトに最初に必要とします。例: ArticleTitle、タグ。

  2. 記事に関するすべての情報を含む NoSQL データベース (CouchDB) を使用します。ドキュメントを CouchDB に保存するときに、記事 ID をドキュメントの名前として作成し、記事 ID を記事ドキュメントに簡単にマップできるようにします。

于 2013-10-02T15:49:09.313 に答える