2010-11-25 90 views

回答

2

当接受这么快的回答时,您不会从更大的受众那里得到答案。

这取决于。你需要考虑几件事情。

  1. 如果你有米老鼠免费的数据库,这意味着它不妥善处理斑点(阅读每一个选择的斑点;不要存储在单独区域的斑点),保持文件之外。

  2. 如果您有企业数据库,将blob保留在数据库中完全没有问题。这些不会读取每个SELECT上的斑点。一个额外的读取blob不是一个“性能”“问题”。

  3. 大多数数据库都是2k页不是8k或16k。如果你的页面尺寸较大,那么在最后一页的未使用部分,每个斑点都会有一些浪费。

  4. 将数据库保留在数据库中的缺点是您的数据库备份会更大。某些企业数据库注意到该页面未更改,并将其从增量备份中排除;其他人没有增量。

  5. 将数据块保留在数据库中的优点是数据和参照完整性。您不会遇到与blob不同步的问题。

    • 去年我完成了一个分配,客户在分贝中有130GB的数据,在分贝以外存储了700GB的文档。经过十年的问题,他们咬紧牙关,将文件移入数据库。猜猜看是什么,应该是一个简单的工作(长而简单),因为参考文献应该是绝对正确的,最终会变得非常庞大,因为有太多重复和无效的参考文献。由此产生的数据库是630GB,有100GB的笨蛋。 2K pagesize。

回应评论

  1. 斜线或反斜线
    容易。在数据库中,仅存储斜杠。您需要一种识别目标系统的方法,并指示IsWindoze。它应该在表层次结构中更高,而不是在您找到Filename的级别。如果指示符已设置,则每当您报告或显示Filename列时,将斜杠更改为反斜杠。
    您将遇到与Unix不具有的DriveLetter和冒号类似的问题。
4

避免将文件存储在数据库中。大多数人不善于处理他们。

+1

只是要补充,它通常是一个坏主意 - 唯一一次它变得远程可行的时候是当你处理数据库,你可以保证记录将在内存中当你需要它,并从那里服务。但几乎在所有情况下,文件系统都是更好的选择。 – Arantor 2010-11-25 02:58:36

0

首选的方法是将文件存储在文件系统中,并将文件的位置存储在数据库中。其原因与数据库物理分配磁盘空间的方式有关(通常是8k或16k块)。删除那里的大文件会导致数据库使用不同的机制来存储文件(SQL Server称为row overflow data)。通常,这些页面位于普通表外,因此每行的每个逻辑读取都会在磁盘上产生两个物理读取。不用说,这对性能不利。

1

最后回答:这取决于你的引擎。

  • 自20世纪90年代以来,SQL Server的页面大小还没有被使用过。 Oracle默认为8K,SQL Server为8K。只有Sybase AFAIK还在上个世纪。

  • SQL Server现在提供FILESTREAM它结合了两者的优点,因为Oracle已经与BFILE

    做长
  • SQL Server和Oracle提供对磁盘和备份压缩

我确保PostgresSQL至少提供类似的功能。

注意:这主要是为PerformanceDBA的FUD提供替代方案

相关问题