存储文件的哪种方法更好?直接将文件存储在数据库中,还是只存储到该文件的位置?
答案 0 :(得分:4)
避免将文件存储在数据库中。大多数人并没有很好地处理它们。
答案 1 :(得分:2)
如果接受答案的速度很快,您就无法从更多受众那里获得答案。
这取决于。你需要考虑几件事。
如果你有一个米老鼠免费软件数据库,这意味着它不能正确处理blob(读取每个SELECT上的blob;不要将blob存储在一个单独的区域中),请将文件保存在外面。
如果您有企业数据库,那么将blob保留在数据库中完全没有问题。这些不会读取每个SELECT上的blob。获得blob的额外读取不是“性能”“问题”。
大多数数据库是2k页而不是8k或16k。如果你的页面大小较大,那么每个blob的最后一页的未使用部分会有一些浪费。
将blob保留在数据库中的缺点是数据库备份会更大。某些企业数据库会注意到页面未更改,并将其从增量备份中排除;其他人没有增量。
将blob保留在数据库中的优点是数据和参照完整性。你不会遇到让行与blob不同步的问题。
回复评论
IsWindoze
指标。它应该在表层次结构中更高,而不是在您找到Filename
的级别。如果设置了指标,则无论何时报告或显示Filename
列,请将斜杠更改为反斜杠
您将遇到与DriveLetter
和冒号相似的问题,而Unix没有。答案 2 :(得分:1)
迟到的答案:这取决于你的发动机。
自20世纪90年代以来,SQL Server一直没有使用2k的页面大小。 Oracle默认为8K,SQL Server为8K。只有Sybase AFAIK仍然在上个世纪。
SQL Server现在提供FILESTREAM,它结合了两全其美,因为Oracle使用BFILE做得更长
SQL Server和Oracle提供磁盘和备份压缩
我确信PostgresSQL至少提供了类似的功能。
注意:这主要是为了提供PerformanceDBA的FUD的替代品
答案 3 :(得分:0)
首选方法是将文件存储在文件系统中,并将文件的位置存储在数据库中。这样做的原因与数据库在磁盘上物理分配空间的方式有关(通常是8k或16k块)。删除大文件会导致数据库使用不同的机制来存储文件(SQL Server将其称为row overflow data)。通常,这些类型的页面位于普通表之外,因此每行的每次逻辑读取都会导致磁盘上的两次物理读取。不用说,这对性能不利。