1

我计划创建一个基于文章的网站,用户将在其中键入他们的文章并上传图片。

现在我有点困惑,我可以以什么方式保存数据。在数据库中或将文件系统用作 .txt 文件或 .html 文件或以任何其他方式。将数据保存在数据库中对我来说有点尴尬,因为最初我计划在共享服务器中运行该站点。那么共享服务器的容量是否足以容纳庞大的内容呢?还是建议将内容另存为单独的 .txt 文件或 .html 文件?

注意事项:

  1. 仅用于文章标题的搜索功能。文章标题将保存在数据库中。搜索功能没有扩展到文章的内容。
  2. 我计划使用 WYSIWYG 编辑器并允许贡献者格式化他们的内容。所以很明显,存储的数据将包含 HTML 代码。所以将内容存储在文件系统中是安全的,因为它会对数据库进行 XSS 攻击,这点是真的吗?
  3. 图像将存储在文件系统中,而不是数据库中。

一个。这样做的时候要注意防止XSS攻击的重点是什么?

湾。如果存储在数据库中是建议的解决方案,那么数据类型应该是什么?文本还是长文本?

4

2 回答 2

2

这是我能想到的两个最常见的解决方案:

  1. 将所有内容存储在数据库中。
  2. 将“小”数据存储在数据库中,并将所有附件(二进制文件,例如 JPEG 和 PDF)存储在文件系统上的数据库之外。

两种解决方案都有优点和缺点。

解决方案 #1:将所有内容存储在数据库中

优点:

  • 使用一些(强大的)数据库,您甚至可以索引(搜索)常见文件格式的内容,例如 PDF(Oracle interMedia就是一个例子)。
  • 您可以轻松确保数据完整性。
  • 您可以轻松确保数据安全。

缺点:

  • 如果您从不维护数据库/表,会使数据库变得巨大并且速度可能会非常缓慢。
  • 可能更难“浏览”二进制内容以进行调试。
  • 如果您的项目有一个巨大的数据库并且有许多用户读/写它,那么您尤其需要运行数据库/表维护。
  • 数据库备份可能更难执行和恢复。
  • 在 Web 应用程序上提供文件有时会很棘手(需要知道 MIME 类型才能正确提供文件)。

解决方案 #2 - 将“小”数据存储在数据库中,并将数据库外的所有附件存储在文件系统上

优点:

  • 文件的 HTTP 缓存稍微容易一些。
  • 更容易浏览文件(用于调试或任何东西)。
  • 无需执行任何特殊操作即可更轻松地维护快速系统。

缺点:

  • 需要创建和维护一个关系表,它将文件系统上的文件链接到数据库中的实体。
  • 无法真正实现数据完整性(如果文件在文件系统上手动删除但仍存在于数据库中会发生什么情况?)。
  • 必须在多个层面上确保安全。

这是我能想到的快速概述。这两种解决方案都很棒,这实际上取决于有多少用户将使用您的项目以及您可以使用哪些硬件。

对于共享环境,我可能会选择#2,因为共享环境通常不是很强大。

于 2013-10-02T16:04:19.010 回答
1

我目前面临同样的问题。我有数百万个配置文件,每个配置文件本身都包含大量数据。不建议在关系数据库中存储大量数据,因为它会降低站点性能。我推荐这个解决方案。

  1. 将数据存储在数据库中,这些数据是搜索所必需的,也是网站最初需要的。例如文章标题、标签。

  2. 使用 NoSQL 数据库 (CouchDB),其中包含有关文章的所有信息。在 CouchDB 中保存文档时,将文章 ID 作为文档名称,以便您可以轻松地将文章 ID 映射到文章文档。

于 2013-10-02T15:49:09.313 回答