我想在多个文件夹中分离存储在服务器上的图像。我想创建这个结构/images/year/month (images/2011/04)。文件名存储在数据库中,并创建日期。单独的文件是一个好主意吗?
嗯,这部分取决于你想用它们做什么,以及你认为这是一个很大的数字。
与索引数据库中的列一样,该方案可能对某些操作有利,而对其他操作不利。
例如,在没有可用日期的简单方案中,能够根据其名称的一部分找到图像可能会变得更加困难,因为您不知道它在哪里。我已经将这种方案用于日志文件之类的东西,但它工作得很好,因为我已经知道将在哪里:/logs/2011/01/2011_01_14.log
而不需要去搜索
现在你已经解决了这个特殊的问题,因为你的数据库条目也保存了日期,所以我看不出你的方案有任何直接的问题。这并不是说没有:-)
我的建议是首先做最简单的事情(平面目录格式),只有当它成为问题时才担心它。既然您有了日期,那么基于日期将所有图像移动到单独的目录将是一件简单的事情。
当然,如果您已经实现了单独的目录,请坚持这样做。同样,如果该方法存在缺陷,则希望在将来能够相对容易地进行调整。
您可能想要考虑的一件事是在数据库中存储位置(绝对位置,或相对于已知点),而不仅仅是日期。然后,您将使用它(而不是对日期进行操作)来定位文件。
这将允许您完全更改用于放置文件的方法,而无需更改定位它们的任何代码。
听起来不错。我经营了一家照片初创公司大约5年,使用了类似的结构来存储照片。它应该适度地缩放(我们有≈1M张照片)。我还会考虑存储图像的sha1或md5散列,以便您可以轻松地检测重复项,并确保在将其持久化到磁盘之前对文件名进行了规范化。