【问题标题】:Database design - large fields数据库设计——大领域
【发布时间】:2017-09-22 15:44:09
【问题描述】:

例如,假设我在博客中有一个文章列表。每篇文章有一张图片,每张图片都有一张缩略图。

显示文章列表时,每篇文章都会显示缩略图;显示单篇文章时,会以全尺寸图片显示。

这意味着我在每篇文章中都有三个大(未知大小)数据项:图像、缩略图和文本。

这些设计的优缺点是什么:

  1. 文章表包括缩略图列和图像列
  2. Articles 表包括缩略图列,图像存储在单独的表中
  3. 缩略图和图像存储在一个单独的表中
  4. 缩略图和图像存储在各自单独的表中
  5. 网站对存储图像和缩略图的文件夹具有写入权限,数据库包含 URL/文件名

(任何我没有考虑过的?)

如果它有所作为,我认为它不应该,该网站将使用 Ruby/Rails 编写,使用 Postgres 或 MySql。

【问题讨论】:

    标签: database-design large-data


    【解决方案1】:

    IMO,选项 5 是最好的。仅仅因为您可以将图像存储在数据库中,并不意味着您应该这样做。将文件位置以及有关图像的任何元数据存储在数据库中。将图像存储在文件系统中。

    将图像存储在数据库中的“缺点”是,您最终会费力地在应用程序中实际使用图像。几乎任何库、脚本、附加组件等都可以使用您的图像,只要它们位于没有任何特殊编码的目录中。将它们放在数据库中,您需要编写代码才能提供使用它们的权限。

    我能看到的唯一好处是在多个 Web 服务器使用单个(或复制数据库)的 webfarm 环境中,图片将自动可供所有 Web 服务器使用,并且可以一次备份所有数据和图像.

    IMO,使用数据库存储图像的缺点远远超过专业人士。

    【讨论】:

    • 在一般情况下,您还必须管理和同步两组不同的权限:一组在 dbms 中,一组在文件系统中。如果允许普通网络公众提交图像,他们将需要部分文件系统的“w”权限,这对于某些公司来说是可以容忍的,而对于其他公司来说是不能容忍的。
    【解决方案2】:

    如果我理解正确,数据库已经根据字段的数据类型和大小自动将大字段分离为单独的“表”。谷歌 “行外存储” 或类似的东西。可能也有这个设置。

    这意味着您不必自己为大字段创建单独的表。

    至于存储在磁盘而不是数据库上,我不知道。我想这个问题已经被问过很多次了。

    【讨论】:

      猜你喜欢
      • 2016-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多