【问题标题】:Conventions and checking file existance vs database storing约定和检查文件存在与数据库存储
【发布时间】:2012-10-03 15:14:01
【问题描述】:

我正在为门户网站构建数据库结构,但我对我决定不会存储在数据库中的元素(通常是媒体,特别是图像)存有疑问。

假设我们有内容并且每个内容都可以有一个主图像。此外,还有一个包含特色内容的幻灯片,需要内容中的大图像。一个直观的想法是让数据库不执行此任务,并使用名称约定存储图像。然后,在代码 (php) 中,我可以检查文件是否存在,然后根据需要执行操作(要求上传幻灯片的图像,显​​示默认图像或地图而不是所需的主图像......)。另一个极端是将文件名存储在数据库中,另一种选择是使用文件名约定,但在数据库中存储一个布尔值而不是检查代码中是否存在。

我对主观角度感兴趣,但我真的很想知道是否有基于技术和客观原因的最佳实践,或者仅仅是出于实际原因......

【问题讨论】:

    标签: php database database-design


    【解决方案1】:

    将图像文件名与每个内容记录一起存储在数据库中。这是最灵活的选项,因为您可以通过更新数据库记录轻松更改所选图像。

    假设您添加了某种后端/管理区域来管理内容。要更改内容的主图像,您可以在图像文件夹中显示文件下拉列表(以及文件上传选项),并轻松将记录更新为所选图像。

    如果您想要内容图像的幻灯片,您只需从表格中选择图像文件名并输出指向图像的<img />标签。

    如果您在没有数据库的情况下执行此操作,请使用命名约定,例如content-image-{contentId}.jpg 然后要更改图像,您需要重命名/删除文件,并且需要满足不同的图像文件扩展名。

    【讨论】:

    • 谢谢,这种情况很可能发生,然后我总是可以保存文件名(主图像或其他画廊图像),然后选择一个作为主图像。
    • @david,你说得对,它非常便携,因为如果你移动了应用程序,你不必担心内容 ID。如果您喜欢答案,请点赞。
    【解决方案2】:

    我不在数据库中存储图像。相反,我将它们存储在磁盘上的一个单独文件夹中,并维护一个包含名称、大小、mimetype 等的表。

    我不将它们存储在数据库中的实际原因:

    • 如果我想更改数据库结构,我会使用mysqldump,然后使用编辑器。如果没有转储中的所有二进制数据,这会更容易。
    • 我的数据库服务器运行在一个快速的 128GB SSD SATA 600 磁盘上以提高性能。空间有限。 images 文件夹是从 12TB 大小的 NAS 存储装载的。
    • 当浏览器需要图片时,它不是通过 html 加载,而是在单独的请求中加载。交付 html 时,图像无需来自快速存储设备。

    【讨论】:

      猜你喜欢
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      相关资源
      最近更新 更多