【问题标题】:Is it better to store a reference to a file in a DB table column or just check the file exists [closed]最好将文件的引用存储在数据库表列中还是只检查文件是否存在[关闭]
【发布时间】:2017-02-28 02:04:52
【问题描述】:

我正在构建一个 .Net/Sql Server 站点,该站点具有一个用户个人资料页面,该页面可以显示该人的个人资料照片(如果存在)。我将照片存储在服务器上的本地文件夹中。每个用户都有自己的子文件夹,使用他们的数据库生成的用户 ID 命名。并且照片文件始终称为 profile.jpg
在数据库中,我有一个用户表来存储个人资料数据,我正在考虑添加一个名为 profile_photo_exists 的列来指示个人资料照片是否存在。

我的问题是,当我可以获取一些服务器端代码来检查用户的文件夹以查看照片文件是否存在时,此 profile_photo_exists 列是否多余。我在想最好有一个数据库列,因为每次检查文件系统可能不会那么高效。不过,我的问题是它看起来像是数据重复,我担心它会不同步。例如,文件夹中缺少文件,但数据库说有一个。

还有其他很好的理由来保留该专栏吗?

【问题讨论】:

  • 将图像存储在数据库中并通过 ID 绑定到用户帐户会更好吗?
  • 我目前正在构建一个 AJAX 站点,我的计划是将所有内容存储在数据库中。我通过调用 asp web 服务函数来做到这一点。
  • 这样做的问题在于它无法扩展。如果你想把你的图片转给 CDN 怎么办?或其他一些外部存储。
  • 我想你是对的。不过我想到了 Azure 数据库。我还在学习,请不要介意。我喜欢被纠正。

标签: c# sql asp.net sql-server database


【解决方案1】:

使用 System.IO 检查文件是否存在对性能的影响非常小。就像您提到的那样,存储标志“profile_photo_exists”的问题是必须使该标志与您的数据库保持同步 - 似乎是不必要的复杂化。

我可能会使用用户的用户 ID 保存上传的个人资料图片。前任。用户 ID.jpg “65d476eb-f52c-4faf-bec2-93073daad6ec.jpg”。这将有助于规范个人资料图片的名称。

然后有一些简单的逻辑来检查自定义个人资料图片,如果不存在则加载“default.jpg”。

我还会考虑是否需要在每个用户文件夹中存储一个 default.jpg - 似乎是多余的?如果您找不到用户的自定义个人资料图片,为什么不只保存一个 default.jpg?如果您想更改默认的个人资料图片,拥有一个 default.jpg 会更容易,并且占用的服务器空间更少。

只要我的 $.02。我希望这会有所帮助。

【讨论】:

  • 这正是我构建它的方式。使用用户 ID 作为文件名可以删除不必要的 db 调用以获取图像位置。
猜你喜欢
  • 1970-01-01
  • 2010-10-20
  • 2017-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多