PHP bug跟踪器:存储附加文件


PHP bug tracker: storing attached files

给定一个带有SQL数据库(MySQL, PostgreSQL, Oracle…)的PHP bug跟踪项目,它应该能够存储每个bug的附加文件。

如何在数据库上存储信息(文件信息和文件本身)?磁盘吗?

  • DB:表bug将有一个相关的表bug_files有一个bug_id字段,和一个filename字段包含磁盘
  • 文件的路径
  • 磁盘:以有效的方式存储文件(避免在单个目录中有太多文件),例如自动创建目录1-10001001-2000等,所以我们可以有/1001-2000/1234/bugfile.jpg或随机子目录,如/z/e/x/q/1000_bugfile.jpg ?

…还是有更有效的方法?

谢谢。

编辑

这也取决于你想怎样得到对于这些文件,您是否使用后端网页,获取所有的错误和为您创建链接?或者你在bug发生后收到一封电子邮件你必须手动找到它吗?我不要认为这个选择很重要。

文件将通过bug跟踪web应用程序(=> HTTP上传/下载)列出/上传/下载。

除了开发人员/系统管理员之外,没有人能够查看自动生成的目录结构(然而,拥有一个"清晰"的结构会更方便)。

我会让文件系统完成它的工作(文件存储)。数据库可以用于文件存储,但(通常)效率不高,例如文件数据可能放在数据库缓冲区中-这本身并不坏,但它可能会从其他表,行数据中占用资源,并降低其他查询的性能。

基于日期和项目名称等的有意义的组合创建目录有助于减少在同一目录中有许多文件时的性能损失。

我强烈建议使用可识别的目录结构,甚至可能是基于日期的或与您的bug文件名(部分)匹配的内容。初版'20110506-bugfile'应该在/2011/05/06/中,也许这有点不匹配,只有2011/05/就足够了。

这也取决于你想如何得到这些文件,你使用一个后端网页,获取所有的错误,并为你创建链接?或者在bug发生后,您会收到一封电子邮件,并且必须手动查找它?我不认为这个选择有多大关系。

一个稍微不同的选择是将文件添加到表bug (http://www.php-mysql-tutorial.com/wikis/mysql-tutorials/uploading-files-to-mysql-database.aspx)中的数据库中,然后您不必创建目录结构,但是,这当然不允许您使用FTP查找文件。